2015-02-24 63 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