首頁  >  文章  >  Java  >  Java 基礎入門隨筆(11) JavaSE版-繼承、覆寫、抽象類

Java 基礎入門隨筆(11) JavaSE版-繼承、覆寫、抽象類

黄舟
黄舟原創
2016-12-22 13:21:071302瀏覽

1.物件導向的特徵二:繼承

定義:

指一個物件直接使用另一物件的屬性和方法。

繼承好處:

1.提供程式碼的複用性。

2.讓類別與類別直接產生了關係,給第三個特徵多態提供了前提。

java中支援單繼承。不直接支援多重繼承,但對C++中的多重繼承機制進行改良。

單繼承:一個子類別只能有一個父類別。

多繼承:一個子類別可以有多個直接父類別(java中不允許,進行改良,不直接支持,因為多個父類別中有相同的成員,會產生呼叫不確定性,在java中是透過「多實現」的方法來體現的。體系時,1查看該類別中的頂層類,了解該體系的基本功能。間存在所屬關係的時候,就定義為繼承。同名用super區分父類。覆蓋(override)

概念:當子父類別中出現成員函數一模一樣的情況,會運行子類別的函數。函數兩個特性:

    1,重載。父類別方法時,子類別權限必須大於等於父類別的權限。

當對一個類別進行子類別的擴展時,子類別需要保留父類別的功能聲明,但是要定義子類別中該功能的特有內容時,就使用覆蓋操作完成.

子父類中的建構函式的特徵

在子類別建構物件時,發現,當訪問子類別建構子時,父類別也運作了。預設的隱式語句。父類中的建構函式呢?的。

如果父類別中沒有定義空參數建構函數,那麼子類別的建構子必須用super明確要呼叫父類別中哪個建構子。同時子類別建構函數中如果使用this呼叫了本類建構函數時,那麼super就沒有了,因為super和this都只能定義第一行。所以只能有一個。但是可以保證的是,子類別中肯定會有其他的建構子來存取父類別的建構子。

注意:supre語句必須定義在子類別建構子的第一行。因為父類別的初始化動作要先完成。

一個物件實例化過程:


例如Person p = new Person();
1,JVM會讀取指定的路徑下的Person.class文件,並載入進內存, 並會先載入Person的父類(如果有直接的父類的情況下).
2,在堆內存中開闢空間,分配地址。
3,並在物件空間中,對物件中的屬性進行預設初始化。
4,呼叫對應的建構子進行初始化。
5,在建構函式中,第一行會先到呼叫父類別中建構函式進行初始化。
6,父類別初始化完畢後,再對子類別的屬性進行顯示初始化。
7,再進行子類別建構子的特定初始化。
8,初始化完畢後,將位址值賦值給引用變數.

圖裂(步驟如下圖):

Java 基礎入門隨筆(11) JavaSE版-繼承、覆寫、抽象類

3.final關鍵字

1.final是一個修飾符,可以修飾類,方法,變數。

2.final修飾的類別不可以被繼承。

3.final修飾的方法不可以被覆蓋。 (此處注意與static區別,如果子類別為static時仍能覆蓋)

4.final修飾的變數是一個常數,只能賦值一次。

   為什麼要用final修飾變數?其實在程式如果一個資料是固定的,那麼直接使用這個資料就可以了,但是這樣閱讀性差,所以該資料取了個名稱。而這個變數名稱的值不能變化,所以加上final固定。

  寫法規範:常數所有字母都大寫,多個單詞,中間用_連結。

 

繼承壞處:

繼承的弊端,打破了封裝性(解決方法可以採用修飾符final進行最終聲明)

4.抽象類別

抽象:模糊,籠統看,不具體。

特點:

1.方法只有聲明沒有實現時,此方法就是抽象方法,需要被abstract修飾。抽象方法必須定義在抽象類別中,該類別必須也被abstract修飾。

2.抽象類別不可以被實例化。 (原因:因為呼叫抽象方法沒意義)

3.抽象類別必須由其子類別覆寫了所有的抽象方法後,該子類別才可以實例化。否則,這個子類別還是抽象類別。

疑問理解:

1.抽象類別中有建構子嗎? 有的,用於給子類別物件進行初始化。

2.抽象類別可以不定義抽象方法嗎?可以的,但是很少見,目的就是不讓該類別建立物件。 AWT的適配器物件就是這種類別。通常這個類別中的方法有方法體,但是卻沒有內容。 eq:void show(){}此類沒方法體

3.抽象關鍵字不可以和哪些關鍵字並存?

private 不行,因為私有隻有父類別知道,抽象需要被覆蓋,但子類別無法覆蓋到,所以不能與private共存。

static  不行,因為如果成員為static時,可直接用類別名稱調用,但方法在抽像中並非特定的方法體,所以也不能並存。

final 不行。因為final是設定成員以及類別不能被覆寫或繼承,所以不能並存。

4.抽象類別和一般類別的異同點?

相同點:抽象類別和一般類別都是用來描述事物的,都在內部定了成員。

不同點:1.一般類別有足夠的資訊描述事物,而抽象類別描述事物的資訊有可能不足。

             2.一般類別中無法定義抽象方法,且只能定義非抽象方法;抽象類別中可以定義抽象方法,同時也可定義非抽象方法。

             3.一般類別可以實例化,且抽象類別不可以實例化。

5.抽象類別一定是父類嗎? 是的,因為需要子類別覆寫其方法後才可以對子類別實例化。

 以上就是Java 基礎入門隨筆(11) JavaSE版-繼承、覆蓋、抽象類別的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn