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