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

时间:2015-02-24 16:17:34

标签: 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
    }

}

我不确定为什么会这样或如何绕过它。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:5)

您需要使用相同的方法签名:

public void setInner(AbstractInnerClass values)

public void setInner(InnerClassImpl values)

你无法解决这个问题,因为实现Foo意味着你的类必须像Foo一样 - 在这种情况下意味着你​​的子类必须能够处理给它的任何AbstractInnerClass,而不仅仅是特定的{{1} }}