Java零基礎快速入門|繼承

本篇文章主要內容
繼承概述
如何繼承
繼承的相關特性
對繼承自Object?類的方法的測試
?難點疑惑
學習目標
了解繼承在java 中有什么作用,以及在代碼上如何實現(xiàn)繼承。
?
知識框架

繼承
繼承概述
繼承是面向對象三大特征之一,封裝居首位,封裝之后形成了獨立體,獨立體 A 和獨立體B?之間可能存在繼承關系。其實程序中的繼承靈感來自于現(xiàn)實生活,在現(xiàn)實生活中繼承處處可見,例如,兒子繼承了父親的財產,兒子不需要努力就很有錢。
生活中的繼承:

繼承時子類繼承父類的特征和行為,使得子類對象(實例)具有父類的屬性,或子類從父類繼承方法,使得子類具有與父類相同的行為。兔子和羊屬于食草動物類,獅子和豹屬于食肉動物類。食草動物和食肉動物又是屬于動物類。所以繼承需要符合的關系是:is-a(Bird is-a Animal),父類更通用,子類更具體。雖然食草動物和食肉動物都是屬于動物,但是兩者的屬性和行為上有差別,所以子類會具有父類的一般特性也會具有自身的特性。
為什么要使用繼承機制?在不同的類中也可能會有共同的特征和動作,可以把這些共同的 特征和動作放在一個類中,讓其它類共享。因此可以定義一個通用類,然后將其擴展為其它多 個特定類,這些特定類繼承通用類中的特征和動作。繼承是 Java 中實現(xiàn)軟件重用的重要手段, 避免重復,易于維護。
?
如何繼承
Java 中繼承的語法格式:

為什么需要繼承,接下來我們用以下這個需求來說明一下:


以上兩個類分別描述了“銀行賬戶類”和“信用賬戶類”,信用賬戶類除了具有銀行賬戶類的特征之外還有自己的特性,按照以上代碼的編寫方式,程序將會非常的臃腫,我們將上面的程序修改為繼承方式,請看代碼:



運行結果如下圖所示:

通過以上的代碼,我們可以看到繼承可以解決代碼臃腫的問題。換句話說,繼承解決了代碼復用的問題(代碼復用就是代碼的重復利用),這是繼承機制最基本的作用。
繼承的作用中除了可以讓代碼復用之外,還有非常重要的兩個作用,那就是有了繼承之后才會衍生出方法的覆蓋和多態(tài)機制。這兩個作用我們在后續(xù)的課程中會詳細講解。目前先理解一下繼承可以做到代碼復用的效果。
?
繼承的相關特性
那么,對于Java 的繼承有哪些特性需要大家理解和記憶呢?我來羅列一下:
① B?類繼承A類,則稱?A類為超類(superclass)、父類、基類,B?類則稱為子類(subclass)、派生類、擴展類。
② java?中的繼承只支持單繼承,不支持多繼承,C++中支持多繼承,這也是 java?體現(xiàn)簡單性的一點,換句話說,java?中不允許這樣寫代碼:class?B?extends?A,C{ ?}。
③ 雖然 java?中不支持多繼承,但有的時候會產生間接繼承的效果,例如:class ?C extends?B,class?B?extends?A,也就是說,C?直接繼承B,其實C?還間接繼承A。
④ java 中規(guī)定,子類繼承父類,除構造方法和被private?修飾的數據不能繼承外,剩下都可以繼承。
⑤ java?中的類沒有顯示的繼承任何類,則默認繼承Object?類,Object?類是java?語言提供的根類(老祖宗類),也就是說,一個對象與生俱來就有Object 類型中所有的特征。
⑥ 繼承也存在一些缺點,例如:CreditAccount?類繼承 Account?類會導致它們之間的耦合度非常高,Account?類發(fā)生改變之后會馬上影響到CreditAccount?類。
對繼承自Object?類的方法的測試
?接下來我們來測試一下從Object 類中繼承過來的方法,先來看一下Object類的部分源代碼:
圖 12-3:Object 類中toString()方法源代碼我們來嘗試調用這個方法,請看代碼以及執(zhí)行結果:

運行結果如下圖所示:

雖然輸出結果看不懂,但是起碼看到這個字符串當中確實是有一個“@”符號的,toString() 方法確實被ExtendsTest 類繼承過來了。
?
難點解惑
對于本章節(jié)內容來說,難點主要是類和類繼承之后的代碼執(zhí)行順序,請看程序:

我們對以上的程序進行分析,子類 H2?繼承 H1,new?H2()執(zhí)行的時候,會先進行類加載, 先加載 H2?的父類 H1,所以 H1?當中的靜態(tài)代碼塊先執(zhí)行,然后再執(zhí)行 H2?中的靜態(tài)代碼塊, 靜態(tài)代碼塊執(zhí)行結束之后,不會馬上執(zhí)行構造方法,代碼塊會先執(zhí)行,Java??中有一條規(guī)則:子類構造方法執(zhí)行前先執(zhí)行父類的構造方法(學習 super?之后大家就知道了),所以父類 H1??的代碼塊先執(zhí)行,再執(zhí)行 H1?的構造方法,然后再執(zhí)行 H2?的代碼塊,最后執(zhí)行 H2?的構造方法。我們對以上程序進行編譯并運行,請看下圖結果:

通過以上的測試結果,可以看出以上我們的分析是正確的。
小結
通過本章節(jié)的學習,要求大家理解什么是繼承,為什么要繼承,繼承有什么好處,繼承的特性有哪些。另外要求大家掌握的是繼承的代碼如何實現(xiàn)。還有?Java?中任何一個類的定義都會自帶Object?類的特征,這是因為Object?是所有類的超類。
最后附Java零基礎視頻教程給大家,配合學習效果更佳??!

