java - 用作方法参数的抽象内部类无法编译

标签 java

我有以下抽象类,其中包含一个抽象内部类和一个利用该内部类的 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/

相关文章:

java - 如何将 JPanel 嵌入到 JavaFX Pane 中?

java - 数组向右移动,但索引 [0] 消失了

Java 类加载器的复杂性

java - 更改现有 BufferedImage 的颜色空间?

java - Arrays.sort() -- 原始和复杂数据类型的两种不同排序策略

java - 多个线程调用静态辅助方法

java - 'int' 和 'Integer' 类型之间的区别

java - 如何在 JDesktopPane 中获取 JInternalFrames 的 z 顺序

Java:为什么基类方法可以调用不存在的方法?

java - 实现远程oauth服务器并与客户端交换 token ,而不在服务器上保存 token