java 中普通類繼承,抽象類繼承,接口類繼承,子類一定要重寫父類中的方法嗎

java 中普通類繼承,抽象類繼承,接口類繼承,子類一定要重寫父類中的方法嗎


簡單總結,需要重寫的有:

普通類繼承抽象類,重寫所有抽象類方法;(不包括普通方法)

普通類繼承接口,重寫所有接口方法。(不包括default關鍵字修飾的方法)


詳解見下:

1. 普通類繼承,並非一定要重寫父類方法。

2. 抽象類繼承,如果子類也是一個抽象類,並不要求一定重寫父類方法。如果子類不是抽象類,則要求子類一定要實現父類中的抽象方法。

3. 接口類繼承。如果是一個子接口,可以擴展父接口的方法;如果是一個子抽象類,可以部分或全部實現父接口的方法;如果子類不是抽象類,則要求子類一定要實現父接口中定義的所有方法。




不一定,關鍵要看子類是否是抽象類。

    如果子類是非抽象類,則必須實現接口中的所有方法;  

    如果子類是抽象類,則可以不實現接口中的所有方法,因爲抽象類中允許有抽象方法的存在!

1、抽象類定義

    抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。通常在編程語句中用 abstract 修飾的類是抽象類。在C++中,含有純虛擬函數的類稱爲抽象類,它不能生成對象;在java中,含有抽象方法的類稱爲抽象類,同樣不能生成對象。抽象類是不完整的,它只能用作基類。在面向對象方法中,抽象類主要用來進行類型隱藏和充當全局變量的角色。

2、抽象類特點

    1)抽象類不能實例化。

    2)抽象類可以包含抽象方法和抽象訪問器。

    3)不能用 sealed 修飾符修飾抽象類,因爲這兩個修飾符的含義是相反的。 採用 sealed 修飾符的類無法繼承,而 abstract 修飾符要求對類進行繼承。

    4)從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實際實現。

3、與具體類的比較


    1)抽象類不能直接實例化,並且對抽象類使用 new 運算符會導致編譯時錯誤。雖然一些變量和值在編譯時的類型可以是抽象的,但是這樣的變量和值必須或者爲 null,或者含有對非抽象類的實例的引用(此非抽象類是從抽象類派生的)。

    2)允許(但不要求)抽象類包含抽象成員。

    3)抽象類不能被密封。

4、與接口的比較

    1)相同點


        a、不能實例化;

        b、包含未實現的方法聲明;

        c、派生類必須實現未實現的方法,抽象類是抽象方法,接口則是所有成員(不僅是方法包括其他成員)

    2)不同點


        a、類可以實現無限個接口,但僅能從一個抽象(或任何其他類型)類繼承,從抽象類派生的類仍可實現接口,從而得出接口是用來解決多重繼承問題的。

        b、抽象類當中可以存在非抽象的方法,可接口不能,且它裏面的方法只是一個聲明必須用public來修飾沒有具體實現的方法。

        c、抽象類中的成員變量可以被不同的修飾符來修飾,可接口中的成員變量默認的都是靜態常量(static final)。

        d、抽象類是對象的抽象,然而接口是一種行爲規範。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章