Java基础小常识-继承-(10)
一、繼承的好處
1.好處:
1)提高了代碼的復(fù)用性
2)讓類與類之間產(chǎn)生了關(guān)系,給第三個特征多態(tài)提供了前提
2.Java中支持單繼承,不直接支持多繼承,但對c++中的多繼承機制進行了改良。
3.單繼承:一個子類只能有一個直接父類
4.多繼承:一個子類可以有多個直接父類(Java中不允許,所以進行改良),不直接支持,因為多個父類中有相同的成員,會產(chǎn)生調(diào)用不確定性。在Java中通過“多實現(xiàn)”的方式來體現(xiàn)
5.Java支持多層(多重)繼承。
例:C繼承B,B繼承A,就會出現(xiàn)繼承體系
當(dāng)要使用一個繼承體系時:1)查看該體系中的頂層類,了解該體系的基本功能。
? 2)創(chuàng)建體系中的最子類對象,完成功能的使用。
6.什么時候定義繼承:當(dāng)類與類之間存在著所屬關(guān)系時,就定義繼承。
7.在子父類中,成員的特點體現(xiàn)
1)成員變量:當(dāng)本類的成員和局部變量同名用this區(qū)分,當(dāng)子父類中的成員變量同名用super區(qū)分父類
this和super的用法很相似:this:代表一個本類對象的引用。super:代表一個父類空間。
2)成員函數(shù):當(dāng)子父類中出現(xiàn)成員函數(shù)一模一樣的情況,會運行子類的函數(shù),這種現(xiàn)象,稱為覆蓋操作,這是函數(shù)在子父類中的特性
函數(shù)兩個特性:1.重載,同一個類中,overload 2.覆蓋:子類中 ,覆蓋也稱為重寫,覆寫override
覆蓋注意事項:1.子類方法覆蓋父類方法時,子類權(quán)限必須大于等于父類權(quán)限 2.靜態(tài)只能覆蓋靜態(tài),或被靜態(tài)覆蓋。
3)構(gòu)造函數(shù):子父類中構(gòu)造函數(shù)的特點,在子類的構(gòu)造函數(shù)中第一行有一個默認(rèn)的隱式語句---》super();
子類的實例化過程:子類中所有的構(gòu)造函數(shù)默認(rèn)都會訪問父類中的空參數(shù)的構(gòu)造函數(shù)。
8.什么時候使用覆蓋操作
1)當(dāng)對一個類進行子類的擴展時,子類需要保留父類的功能聲明
但是要定義子類中該功能的特有內(nèi)容時,就使用覆蓋操作完成。
9.子父類中的構(gòu)造函數(shù)的特點:
在子類構(gòu)造對象時,發(fā)現(xiàn),訪問子類的構(gòu)造函數(shù)時,父類也運行了。為什么???
原因:在子類的構(gòu)造函數(shù)中第一行有一個默認(rèn)的隱式語句---》super()
子類的實例化過程:子類中所有的構(gòu)造函數(shù)默認(rèn)都會訪問父類中的空參數(shù)構(gòu)造函數(shù)。
為什么子類實例化的時候要訪問父類中的構(gòu)造函數(shù)呢???
原因:那是因為子類繼承了父類,獲取到了父類中的內(nèi)容(屬性),所以在使用父類內(nèi)容之前,要先看父類是如何對自己的內(nèi)容進行初始化的。
所以子類在構(gòu)造對象時,必須訪問父類中的構(gòu)造函數(shù)。為了完成這個必要的動作,就在子類的構(gòu)造函數(shù)中加入了super()語句。
?
如果父類中沒有定義空參數(shù)的構(gòu)造函數(shù),那么子類中的構(gòu)造函數(shù)必須要用super語句確定引用父類中的那個構(gòu)造函數(shù)。同時子類構(gòu)造函數(shù)中如果使用this調(diào)用了本類構(gòu)造函數(shù)時,那么super就沒有了,因為super和this都只能定義在第一行,所以只能有一個。但是可以保證的是,子類中肯定有其他的構(gòu)造函數(shù)去訪問父類的構(gòu)造函數(shù)。
注意:1)super語句必須要定義在子類構(gòu)造函數(shù)的第一行,因為父類的初始化動作要先完成。
2)通過super初始化父類內(nèi)容時,子類的成員變量并未顯示初始化。等super()父類初始化完畢后,才進行子類的成員變量顯示初始化。
一個對象實例化過程:
Person p = new Person();
1),JVM會讀取指定的路徑下的Person.class文件,并加載進內(nèi)存,
?? ?并會先加載Person的父類(如果有直接的父類的情況下).
2),在堆內(nèi)存中的開辟空間,分配地址。
3),并在對象空間中,對對象中的屬性進行默認(rèn)初始化。
4),調(diào)用對應(yīng)的構(gòu)造函數(shù)進行初始化。
5),在構(gòu)造函數(shù)中,第一行會先到調(diào)用父類中構(gòu)造函數(shù)進行初始化。
6),父類初始化完畢后,在對子類的屬性進行顯示初始化。
7),在進行子類構(gòu)造函數(shù)的特定初始化。
8),初始化完畢后,將地址值賦值給引用變量.
轉(zhuǎn)載于:https://www.cnblogs.com/Aftersoon-sun/p/6728836.html
總結(jié)
以上是生活随笔為你收集整理的Java基础小常识-继承-(10)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于layui-layer独立组件--弹
- 下一篇: Java 中 StringBuilder