/* Types.java * * An example of a polymorphic method in Java * * $ javac Types.java * $ java Types * 3 + 4 is 7. * 3.20000 + 4.10000 is 7.30000. * * Jim Mahoney | cs.bennington.college | MIT License | Oct 2021 */ class IntOrDouble { public static final int _INT_ = 1; public static final int _DOUBLE_ = 2; public int type; public int intval; public double doubleval; public IntOrDouble(int value){ /* int constructor */ type = _INT_; intval = value; } public IntOrDouble(double value){ /* float constructor */ type = _DOUBLE_; doubleval = value; } public IntOrDouble add(int other){ /* add int */ System.out.println(" -- integer add -- "); return new IntOrDouble(other + intval); } public IntOrDouble add(double other){ /* add float */ System.out.println(" -- double add -- "); return new IntOrDouble(other + doubleval); } public IntOrDouble add(IntOrDouble other){ /* add IntOrDouble */ if (type == _INT_){ return new IntOrDouble(intval + other.intval); } if (type == _DOUBLE_){ return new IntOrDouble(doubleval + other.doubleval); } System.out.printf("Oops - unknown IntOrDouble type\n"); return new IntOrDouble(0); } } class Types { public static void main(String[] args){ IntOrDouble result; IntOrDouble i = new IntOrDouble(3); IntOrDouble j = new IntOrDouble(4); IntOrDouble x = new IntOrDouble(3.2); IntOrDouble y = new IntOrDouble(4.1); result = i.add(j); System.out.printf(" %d + %d is %d.\n", i.intval, j.intval, result.intval ); result = x.add(y); System.out.printf(" %g + %g is %g.\n", x.doubleval, y.doubleval, result.doubleval); } }