本文引用地址:https://www.runoob.com/java/java-inheritance.html
卓安特保|山東卓安|聯(lián)網(wǎng)報(bào)警|濟(jì)南監(jiān)控安裝|15562629707|13361029977|李田軍
繼承的概念
繼承是java面向?qū)ο缶幊碳夹g(shù)的一塊基石,因?yàn)樗试S創(chuàng)建分等級層次的類。
繼承就是子類繼承父類的特征和行為,使得子類對象(實(shí)例)具有父類的實(shí)例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。

兔子和羊?qū)儆?/SPAN>食草動(dòng)物類,獅子和豹屬于食肉動(dòng)物類。
食草動(dòng)物和食肉動(dòng)物又是屬于動(dòng)物類。
所以繼承需要符合的關(guān)系是:is-a,父類更通用,子類更具體。
雖然食草動(dòng)物和食肉動(dòng)物都是屬于動(dòng)物,但是兩者的屬性和行為上有差別,所以子類會(huì)具有父類的一般特性也會(huì)具有自身的特性。
父類{ 子類 ; SPAN: " #333333; FONT-SIZE: FONT-FAMILY: COLOR: Helvetica; 12.5pt; m 宋體; mso-ascii-font-family: mso-hansi-font-family:>為什么需要繼承
接下來我們通過實(shí)例來說明這個(gè)需求。
開發(fā)動(dòng)物類,其中動(dòng)物分別為企鵝以及老鼠,要求如下:
· 企鵝:屬性(姓名,id),方法(吃,睡,自我介紹)
· 老鼠:屬性(姓名,id),方法(吃,睡,自我介紹)

從這兩段代碼可以看出來,代碼存在重復(fù)了,導(dǎo)致后果就是代碼量大且臃腫,而且維護(hù)性不高(維護(hù)性主要是后期需要修改的時(shí)候,就需要修改很多的代碼,容易出錯(cuò)),所以要從根本上解決這兩段代碼的問題,就需要繼承,將兩段代碼中相同的部分提取出來組成 一個(gè)父類:

這個(gè)Animal類就可以作為一個(gè)父類,然后企鵝類和老鼠類繼承這個(gè)類之后,就具有父類當(dāng)中的屬性和方法,子類就不會(huì)存在重復(fù)的代碼,維護(hù)性也提高,代碼也更加簡潔,提高代碼的復(fù)用性(復(fù)用性主要是可以多次使用,不用再多次寫同樣的代碼) 繼承之后的代碼:
繼承類型
需要注意的是
Java 不支持多繼承,但支持多重繼承。

繼承的特性
· 子類擁有父類非 private 的屬性、方法。
· 子類可以擁有自己的屬性和方法,即子類可以對父類進(jìn)行擴(kuò)展。
· 子類可以用自己的方式實(shí)現(xiàn)父類的方法。
· Java 的繼承是單繼承,但是可以多重繼承,單繼承就是一個(gè)子類只能繼承一個(gè)父類,多重繼承就是,例如 A 類繼承 B 類,B 類繼承 C 類,所以按照關(guān)系就是 C 類是 B 類的父類,B 類是 A 類的父類,這是 Java 繼承區(qū)別于 C++ 繼承的一個(gè)特性。
· 提高了類之間的耦合性(繼承的缺點(diǎn),耦合度高就會(huì)造成代碼之間的聯(lián)系越緊密,代碼獨(dú)立性越差)。
繼承關(guān)鍵字
繼承可以使用 extends 和 implements 這兩個(gè)關(guān)鍵字來實(shí)現(xiàn)繼承,而且所有的類都是繼承于 java.lang.Object,當(dāng)一個(gè)類沒有繼承的兩個(gè)關(guān)鍵字,則默認(rèn)繼承object(這個(gè)類在 java.lang 包中,所以不需要 import)祖先類。
extends關(guān)鍵字
在 Java 中,類的繼承是單一繼承,也就是說,一個(gè)子類只能擁有一個(gè)父類,所以 extends 只能繼承一個(gè)類。

implements關(guān)鍵字
使用 implements 關(guān)鍵字可以變相的使java具有多繼承的特性,使用范圍為類繼承接口的情況,可以同時(shí)繼承多個(gè)接口(接口跟接口之間采用逗號分隔)。
super 與 this 關(guān)鍵字
super關(guān)鍵字:我們可以通過super關(guān)鍵字來實(shí)現(xiàn)對父類成員的訪問,用來引用當(dāng)前對象的父類。
this關(guān)鍵字:指向自己的引用。

final關(guān)鍵字
final 關(guān)鍵字聲明類可以把類定義為不能繼承的,即最終類;或者用于修飾方法,該方法不能被子類重寫:
注:實(shí)例變量也可以被定義為 final,被定義為 final 的變量不能被修改。被聲明為 final 類的方法自動(dòng)地聲明為 final,但是實(shí)例變量并不是 final
構(gòu)造器
子類是不繼承父類的構(gòu)造器(構(gòu)造方法或者構(gòu)造函數(shù))的,它只是調(diào)用(隱式或顯式)。如果父類的構(gòu)造器帶有參數(shù),則必須在子類的構(gòu)造器中顯式地通過 super 關(guān)鍵字調(diào)用父類的構(gòu)造器并配以適當(dāng)?shù)膮?shù)列表。
如果父類構(gòu)造器沒有參數(shù),則在子類的構(gòu)造器中不需要使用 super 關(guān)鍵字調(diào)用父類構(gòu)造器,系統(tǒng)會(huì)自動(dòng)調(diào)用父類的無參構(gòu)造器。
輸出結(jié)果為:
------SubClass 類繼承------
SuperClass()
SubClass
SuperClass(int n)
SubClass(int n):100
------SubClass2 類繼承------
SuperClass(int n)
SubClass2
SuperClass()
SubClass2(int n):200