我有以下抽象类,其中包含一个抽象内部类和一个利用该内部类的 getter/setter
public abstract class AbstractOuterClass
{
public abstract AbstractInnerClass getInner();
public abstract void setInner(AbstractInnerClass values);
public abstract class AbstractInnerClass
{
}
}
当我尝试重写 setter(getter 工作正常)时,编译器不会将 setter 识别为被重写,因为它的方法参数是扩展的抽象内部类。
public class OuterClassImpl extends AbstractOuterClass
{
@Override
public InnerClassImpl getInner()
{
return null;
}
@Override
public void setInner(InnerClassImpl values)
{
// do stuff
}
public class InnerClassImpl extends AbstractInnerClass
{
// define attrs
}
}
我不确定这是为什么或者如何解决它。任何帮助将不胜感激。
最佳答案
您需要使用相同的方法签名:
public void setInner(AbstractInnerClass values)
不是:
public void setInner(InnerClassImpl values)
你无法解决这个问题,因为实现 Foo 意味着你的类必须表现得像 Foo - 在这种情况下,这意味着你的子类必须能够处理赋予它的任何 AbstractInnerClass
,而不仅仅是特定的InnerClassImpl
。
关于java - 用作方法参数的抽象内部类无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28700856/