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