Javagenerics – 覆盖抽象方法并具有子类的返回类型

我正在尝试创建一个设置,其中一组子类覆盖超类。 这个超类包含一个抽象方法 – 理想情况下,它的返回类型是调用此方法的对象的返回类型,因此它的行为有效地如下:

public abstract class SuperClass{ public abstract SuperClass getSelf(); } public class SubClass extends SuperClass{ @Override public SubClass getSelf(){ return this; } } 

我不确定这样的事情是否可能,因为我认为返回类型总是必须相同才能使覆盖工作 – 但是我一直在想答案,如果存在的话,就在这条线的某个地方…

 public abstract class SuperClass{ public abstract  getSelf(); } public class SubClass extends SuperClass{ @Override public SubClass getSelf(){ return this; } } 

谢谢你的帮助。

编辑:添加扩展SuperClass到SubClass,呃

这将有效:

 public abstract class SuperClass{ public abstract SuperClass getSelf(); } public class SubClass extends SuperClass{ @Override public SubClass getSelf(){ return this; } } 

注意我已经将extends SuperClass添加到您的SubClass定义中。 getSelf的返回类型称为协变返回类型 。

这个怎么样:

 public abstract class SuperClass> { public abstract T getSelf(); } public class SubClass extends SuperClass { public SubClass getSelf() { return this; } } 

我知道它是相当重复的,没有任何东西将类型绑定为相同的SubClass实例,因为AnotherSubClass也会满足绑定,但至少它应该可以解决问题。

以下是如何做到这一点(从JDK 1.5开始,有一种称为协变返回类型的东西,这样的东西是可能的)。

 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()); } } 

注意与Enum类似的类通用定义(http://download.oracle.com/javase/1,5.0/docs/api/java/lang/Enum.html)

看看幕后发生了什么(通过使用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(); } 

注意子类方法如何具有不同的返回类型,这是超类方法返回类型的子类型。

顺便说一句,注意public SuperClass getSelf(); 在类SubClass中实际上是一种合成方法。