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

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

关于java - 从子类的抽象类扩展嵌套类,并使方法使用嵌套类的新定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12229473/

10-12 00:13