2

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

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() {
        ......
    }
}
4

1 回答 1

2

我认为最好的方法是声明一个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();
    }
}

然后,当您的基类想要一个 newBaseNested时,它会调用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();
    }
    //...
}
于 2012-09-01T16:34:19.563 回答