Java繼承和組合

來源:互聯網
上載者:User

標籤:成員   --   test   異常   資料   屬性   nbsp   子類   類重寫   

 為了保證父類有良好的封裝性,不會被子類隨意修改,設計父類通常應該遵循以下規則:

1、盡量隱藏父類的內部資料,盡量把父類的所有成員變數設定為 private 訪問類型,不要讓子類直接存取父類的成員變數;

2、不要讓子類可以隨意訪問和修改父類方法,父類中僅為輔助其他工具的方法,應該使用private 存取控制符修飾,讓子類無法訪問該方法;如果父類中的方法需要被外部類調用,則必須設定為  public 修飾,但不希望子類重寫該方法,可以使用final修飾符來修飾該方法;如果希望父類的某個方法被子類重寫,但不希望被其他類自由訪問,則可以使用protected來修飾該方法。

3、盡量不要在父類構造器中調用將要被子類重寫的方法。

package test_Java;class Base {    public Base()    {        test();    }    public void test()//1    {        System.out.println("將被子類重寫的方法");    }    }public class Sub {    private String name;    public void test()//2    {        System.out.println("子類重寫父類的方法, "+"其name字串的長度"+name.length());    }    public static void main(String[] args) {        // TODO Auto-generated method stub        Sub s = new Sub();                s.test();//null 指標異常    }}

產生null 指標異常的原因:當系統試圖建立Sub對象時,同樣會先執行其父類構造器,如果父類構造器調用了被其子類重寫的方法,則變成調用被子類重寫後的方法,當建立Sub對象時,會先執行Base類中的Base構造器,而Base構造器中調用test()方法-----並不是1而是2,此時的Sub對象的name執行個體變數是null,因此將引發null 指標異常。

到底何時需要從父類派生出新的子類,具備以下條件:

  • 子類需要額外增加屬性,不僅僅是屬性值的改變。
  • 子類需要增加自己專屬的行為方式,

如果只是出於類複用的目的,並不一定需要使用繼承,完全可以使用組合來實現。

Java繼承和組合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.