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,初始化完畢後,將位址值賦值給引用變數.
圖裂(步驟如下圖):
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)!