2015-02-24 72 views
0

我有以下的抽象类用一个抽象内部类和吸气/设定部,其利用所述内部类摘要内部类编译失败

public abstract class AbstractOuterClass 
{ 

    public abstract AbstractInnerClass getInner(); 
    public abstract void setInner(AbstractInnerClass values); 

    public abstract class AbstractInnerClass 
    { 

    } 

} 

当试图覆盖设置器(该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 
    } 

} 

我不知道为什么这是或如何避开它。任何帮助,将不胜感激。

回答

5

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

public void setInner(AbstractInnerClass values) 

不是:

public void setInner(InnerClassImpl values) 

你不能左右这个搞定,因为实施美孚意味着你的类必须表现得像一个Foo - 在这个案例意味着您的子类必须能够处理给定的任何AbstractInnerClass,而不仅仅是具体的InnerClassImpl