如何在抽象Java类中引用"this"?



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

最新更新