在Java中,是否可以在抽象类的方法中使用this
,但作为手头子类的实例,而不仅仅是抽象类的实例?
abstract class MyAbstractClass <MyImplementingClass extends MyAbstractClass> {
public abstract MyImplementingClass self();
}
我用在每个子类中覆盖
class MyImplementingClass extends MyAbstractClass<MyImplementingClass> {
@Override public MyImplementingClass self() {
return this;
}
}
但我想知道是否有更优雅的方法可以做到这一点。特别是,它不需要每个子类都覆盖像self()
这样的例程。
我认为这里的问题是您的self()
方法返回MyImplementingClass
而不是MyAbstractClass
。
您应该返回一个MyAbstractClass
,返回对象的动态类型将是相关的。
我也不明白为什么你不直接使用this
?它返回对象本身,具有正确的动态类型,无论在哪里调用它。如果需要
在Java中重写方法时,可以将返回类型重写为原始类型的子类。此代码完全有效:
abstract class MyAbstractClass {
public MyAbstractClass self() {
return this;
}
}
具体类别:
class MyImplementingClass extends MyAbstractClass {
@Override
public MyImplementingClass self() {
return this;
}
}
这也是为什么您可以重写clone()
以返回确切的类型,而不仅仅是Object
:
public class SomeCloneable implements Cloneable {
@Override
public SomeCloneable clone() {
return new SomeCloneable();
}
}
我相信,您可以返回类的newInstance()
,使其行为与类似
@Override public MyImplementingClass self() {
return MyImplementingClass.newInstance();
}