2014-02-11 42 views
0

在我的具體類中,我只需要實現(公開)抽象類的某些方法。所以我不能擴展它,因爲所有的抽象方法都是公開的。如何僅實現抽象類的某些方法?

我可以使用組合,並只轉發我需要的方法,但我顯然需要實現抽象類。 所以,我想知道,是在私人類中實現抽象類,然後在父類中僅轉發內部類所需的方法的好方法嗎?

例如:

public class ConcreteClass{ 

    private InnerClass inner = new InnerClass(); 

    public String fwMethod() { 
     return inner.method1(); 
    } 

    private class InnerClass extends AbstractClass { 
     public String method1(){ ...} 
     public String method2(){ ...} 
    } 
} 

有一些更好的辦法?

+1

這聽起來像你的抽象類可能太大,開始......你控制它嗎? –

回答

0

一個抽象類的具體子類必須提供的抽象方法中的至少最小的實施方案。

  • 可以實現,你不希望實現拋出一個未經檢查的異常的方法。 UnsupportedOperationException是不錯的選擇,或者你可以用更具體的含義來實現你自己的類。

  • 你可以聲明子類爲abstract ......雖然這意味着你將無法實例化它。

  • 你可以重構你的基類和接口,這樣你的具體類就不需要實現抽象方法。

1

爲什麼不修改抽象類來從另一個類繼承,並且只使用所需的方法實現了一個類?

例如,如果你只需要AA,AB,而不是AA,AB,AAA,AAB: A類,方法AA,AB B類,方法AAA,AAB B,從A.

您的具體繼承類繼承自A,並且只能訪問aa和ab,避免實現aaa,aab。