// example of polymorphism with "single dispatch" abstract class Number { public abstract void print(); public abstract void inc(); // adds one to current value public abstract boolean leq(Number N); // less than or equal to } class Int extends Number { private int x; // value of encapsulated integer public Int(int x0) { super(); x = x0; } public void print() { System.out.print(x); } public void inc() { x++; } public boolean leq(Number N) { Int I = (Int)N; // type casting needed return x < I.x; } public String toString() { return ""+x; } } class Fraction extends Number { private int num, dem; // numerator, denominator public Fraction(int n, int d) { num = n; dem = d; } public void print() { System.out.print(num+"/"+dem); } public void inc() { num = num + dem; } public boolean leq(Number N) { Fraction F = (Fraction)N; return num*F.dem < dem*F.num; } public String toString() { return num+"/"+dem; } } public class polybubble { public static void bubble(Number[] A) // bubblesort algorithm { int i, j; Number temp; int n = A.length; // array length is inside array object for(i=0;i