2011-09-02 187 views
0

我想隱藏用戶可繼承類中的一些方法。 例如:如何隱藏可繼承類中的公共方法

public class Test extends TextView { 

    public Test(Context context) { 
      super.onCreate(context); 
    } 

    /* hide this method */ 
    @Override 
    protected void setText(CharSequence text) { 
      super.setText(text); 
    } 
} 

然後,我不希望看到的測試類中的這個方法。 我該怎麼辦?對不起,我的英語

+0

你是怎麼意思隱藏它的?你能否更詳細地解釋你想達到的目標? – Martyn

+0

請說明你的意思是「隱藏」。你可以刪除它,因爲它只調用超級,並且它在'TextView'中是公共的,所以不需要在你的'Test'類中包含它。如果通過「隱藏」你的意思是使它成爲'private',那是不可能的 - 它被'TextView'定義爲公開的,並且你不能減少繼承方法的可見性。 –

回答

0

這聽起來像是一個設計問題,因爲隱藏它似乎有點髒,因爲分配給子類的基類應該仍然能夠調用基類方法。

但是,您可以做2件事之一。

  1. 將方法標記爲不建議使用。注意:棄用通常用於告訴人們不使用方法B/C它很快會被刪除,但目前仍然有效,而在這裏它根本無法工作(大概)...

    AND在方法中拋出UnsupportedOperationException這樣你/他人如果被調用就可以及早接受它。

    /* 
    * @deprecated Do not call this method. 
    */ 
    @Deprecated 
    @Override 
    protected void setText(CharSequence text) { 
         throw new UnsupportedOperationException("not supported"); 
    } 
    
  2. 而不是子類考慮組成。通過這個,我的意思是創建一個包裝所需類的類並只公開你想要的東西。如果您需要原始類和包裝類之間的通用接口,請創建它們都實現並使用接口但使用新類實例化的接口。

+0

我還應該提到,我更喜歡第二種選擇,但它更多的工作。 – Sam