// contravariance in java class student implements Comparable { public final String name; // can be sorted public student(String n) {name=n;} public int compareTo(student other) { return name.compareTo(other.name); } // compare Strings alphabetically } class undergrad extends student { public String major; public undergrad(String n, String m) {super(n); major=m;} // try to inherit compareTo } // generic sorting class class sorter> { public void bubblesort(T[] A) { for(int i=0;i0) { T x = A[j]; A[j]=A[j+1]; A[j+1]=x; } } }//sorter public class contraex { public static void main(String[] aa) { undergrad[] A = {new undergrad("shashank","cs"), new undergrad("adam","cs")}; sorter S = new sorter(); S.bubblesort(A); for (undergrad x : A) System.out.println(x.name); } }