从子类中的抽象类扩展嵌套类,并使方法使用嵌套类的新定义



我有一个基类抽象类,里面有一个嵌套类。在其中一个子类中,我需要扩展嵌套类,但从基类继承的抽象方法需要嵌套类的基类定义(用于返回类型和参数)。如何使它们使用嵌套类的新定义?此外,非抽象方法(我没有重写)也不能正常工作(在我将它们移到抽象类之前,它们工作得很好)。

abstract class Base {
    protected class Nested{
        ....
    }
    protected abstract Nested someMethod();
    protected void anotherMethod(Nested x){
        ......
    }
}
class Derived {
    class Nested extends Base.Nested {
        ....
    }
    protected Nested someMethod() {
        ......
    }
}

我认为最好的方法是声明一个protected,可以选择抽象工厂方法来创建Nested类。

类似这样的东西:

abstract class Base {
    protected class BaseNested {
        ....
    }
    protected abstract BaseNested newNested();
}
class Derived extends Base {
    class DerivedNested extends BaseNested {
        ....
    }
    protected BaseNested newNested() {
       return new DerivedNested();
    }
}

然后,当基类想要一个新的BaseNested时,它会调用newNested而不是new DerivedNested()

如果出于某种原因,您只需要Derived来处理这些方法的Derived.Nested,而不需要Base.Nested(您应该仔细评估该决定),那么您可以使用泛型。在它处理的嵌套类的类型上键入Base

abstract class Base<T extends BaseNested> {
    protected abstract T newNested();
    protected abstract T someMethod();
    protected void anotherMethod(T nested) {
        //...
    }
}
class Derived extends Base<DerivedNested> {
    protected DerivedNested newNested() {
       return new DerivedNested();
    }
    //...
}

最新更新