-
Java面向?qū)ο蟮娜筇匦裕悍庋b,繼承,多態(tài)
1.繼承(在原有類的基礎(chǔ)上< 屬性和方法>,構(gòu)造一個新的 類。)
在 java 當(dāng)中,用extends關(guān)鍵字來表示一個類繼承了一個類。
父類更通用更抽象,子類更特殊更具體(因為父類相對于子類 而言,父類中有的方法,子類全都有;而子類有的屬性和方法父類 未必有,所以子類更具體,父類更抽象)。
頂層是Object類,所以當(dāng)你創(chuàng)建一個類時,都在間接或直接的 繼承了Object父類,即你創(chuàng)建的類永遠(yuǎn)為子類
繼承的特點:子類繼承了父類的成員(即屬性和方法),雖然 父類中私有的屬性和方法也被繼承了,但是訪問不到。
2.引用類型比較方法
在object類中equals方法只能用來比較地址是否一樣
String可以使用equals比較地址是因為它重寫了equals方法
public class Father(){} // 父類
public class Son extends Father(){} // 子類
權(quán)限修飾符:private只支持同一類里面的;
friendly:支持同胞和本類;
protected:支持同胞 父子 本類;
public:全部都支持。
3.重寫 與 重載
3.1重寫:
當(dāng)子類繼承父類的方法,這些方法不滿足自身需求時,子類可 以重寫從父類繼承的方法:
- 返回類型、方法名、參數(shù)與父類完全相同。
方法重寫要求:返回值類型相同或者父類返回值類型的子類 類型,方法名稱相同
效果:子類在調(diào)用方法時,會調(diào)用自身重寫的方法,父類的方 法就被覆蓋了不可見。
3.2重載:
在同一類中方法名稱相同,方法的參數(shù)列表不同,和返回值無 關(guān)
參數(shù)列表不同的表現(xiàn)形式:參數(shù)的類型不同,個數(shù)不同,位置不 同,參數(shù)列表不同和參數(shù)名稱沒有關(guān)系
4.equals 與 == 以及 instanceof的區(qū)別
"==" 比較基本數(shù)據(jù)類型時比較的是表面值內(nèi)容,而比較兩個 對象時比較的是兩個對象的內(nèi)存地址值
對于equals方法,注意:equals 方法不能作用于基本數(shù)據(jù)類 型的變量,如果沒有對equals方法進行重寫,則比較的是引用類型 的變量所指向的對象的地址。
-
概括:
在基本數(shù)據(jù)類型比較值內(nèi)容時 ”=“
引用類型時:如果 equals 重寫則比較值內(nèi)容 equals不重寫則比較地址
4.instanceof:用來判斷內(nèi)存中實際對象A是不是B類型,一般用 來做類的類型判斷。如果是同類,則使用強轉(zhuǎn)。
5.super 關(guān)鍵字
super關(guān)鍵字和this關(guān)鍵字的特點類似
super關(guān)鍵字代表的是父類對象的引用(保存的是父類引用對象 的內(nèi)存地址)。
**this**關(guān)鍵字代表的是當(dāng)前對象的引用(保存的是當(dāng)前對象的內(nèi) 存地址)。
當(dāng)子父類的成員出現(xiàn)同名的時候,可以通過super關(guān)鍵字來區(qū) 分。子類的構(gòu)造方法中,通過super關(guān)鍵字來調(diào)用父類的構(gòu)造方法, 且必須是子類構(gòu)造方法中的第一條語句。
當(dāng)我們產(chǎn)生子類對象的時候,肯定先要去調(diào)用父類的構(gòu)造方法 來產(chǎn)生父類的對象,再產(chǎn)生子類對象。
6.出入多態(tài)
多態(tài)存在的前提
- 要有繼承
- 要有重寫
- 要有父類引用指向子類對象
- 多態(tài)的特性:擴展性較強