I am trying to create a set up where a set of subclasses override a superclass. This superclass contains an abstract method - the return type of which would ideally be that of t
Here is how to do it (Since JDK 1.5 there is this thing called covariant return types, where something like this is possible).
abstract class SuperClass>{
public abstract T getSelf();
}
class SubClass extends SuperClass {
public SubClass getSelf() { return this; }
}
public class Generics {
public static void main(String[] args) {
System.out.println(new SubClass().getSelf());
}
}
Notice a similar class generic definition with Enum (http://download.oracle.com/javase/1,5.0/docs/api/java/lang/Enum.html)
See what happens behind the scenes (by using javap SuperClass SubClass):
class SubClass extends SuperClass{
SubClass();
public SubClass getSelf();
public SuperClass getSelf();
}
abstract class SuperClass extends java.lang.Object{
SuperClass();
public abstract SuperClass getSelf();
}
Notice how the subclass method has a different return type, which is a subtype of the super method return type.
Btw, notice that public SuperClass getSelf();
in class SubClass
is actually a synthetic method.