- 繼承:
多個類中存在相同屬性和行為時,將這些內(nèi)容抽取到單獨(dú)一個類中,那么多個類無需再定義這些屬性和行為,只要繼承那個類即可。
多個類可以稱為子類,單獨(dú)這個類稱為父類、超類或者基類。
子類可以直接訪問父類中的非私有的屬性和行為。
通過extends
關(guān)鍵字讓類與類之間產(chǎn)生繼承關(guān)系,以下是繼承的格式
class Student extends Person{} //Student是子類,Person是父類
繼承的好處:
可以提高代碼的復(fù)用性,讓類與類之間產(chǎn)生了關(guān)系,是多態(tài)的前提繼承的特點
Java只支持單繼承,不支持多繼承,一個類只能有一個父類,不可以有多個父類。
Java支持多層繼承(繼承體系),比如:
class B extends A{}
class C extends B{}```
繼承要注意的事項:
0.如果類之間存在著:is a 的關(guān)系,就可以考慮使用繼承。
1. 千萬不要為了減少重復(fù)代碼而去繼承,只有真正存在著繼承關(guān)系的時候才去繼承。
2. 父類私有的成員不能被繼承。
3. 父類的構(gòu)造函數(shù)不能被繼承。
4. 創(chuàng)建子類對象時默認(rèn)會先調(diào)用父類無參的構(gòu)造函數(shù)。
- super關(guān)鍵字:
>super關(guān)鍵字代表了父類空間的引用。
super關(guān)鍵字的 作用:
1. 子父類存在著同名的成員時,在子類中默認(rèn)是訪問子類的成員,可以通過super關(guān)鍵字指定訪問父類的成員。
2. 創(chuàng)建子類對象時,默認(rèn)會先調(diào)用父類無參的構(gòu)造方法,可以通過super關(guān)鍵字指定調(diào)用父類的構(gòu)造方法。
super關(guān)鍵字調(diào)用父類構(gòu)造方法要注意的事項:
1. 如果在子類的構(gòu)造方法上沒有指定調(diào)用父類的構(gòu)造方法,那么java編譯器會在子類的構(gòu)造方法上面加上super()語句。
2. super關(guān)鍵字調(diào)用父類的構(gòu)造函數(shù)時,該語句必須要是子類構(gòu)造函數(shù)中的第一個語句。
3. super與this關(guān)鍵字不能同時出現(xiàn)在同一個構(gòu)造函數(shù)中調(diào)用其他的構(gòu)造函數(shù)。因為兩個語句都需要第一個語句。
super關(guān)鍵字與this關(guān)鍵字的區(qū)別:
1. 代表的事物不一致。
1. super關(guān)鍵字代表的是父類空間的引用。
2. this關(guān)鍵字代表的是所屬函數(shù)的調(diào)用者對象。
2. 使用前提不一致。
1. super關(guān)鍵字必須要有繼承關(guān)系才能使用。
2. this關(guān)鍵字不需要存在繼承關(guān)系也可使用。
3. 調(diào)用構(gòu)造函數(shù)的區(qū)別:
1. super關(guān)鍵字是調(diào)用父類的構(gòu)造函數(shù)。
2. this關(guān)鍵字是調(diào)用本類的構(gòu)造函數(shù)。
- 方法重寫的前提: 必須要存在繼承的關(guān)系。
>方法的重寫: 子父類出了同名的函數(shù),這個我們就稱作為方法的重寫。
什么是時候要使用方法的重寫:父類的功能無法滿足子類的需求時。
方法重寫要注意的事項:
1.方法重寫時, 方法名與形參列表必須一致。
2.方法重寫時,子類的權(quán)限修飾符必須要大于或者等于父類的權(quán)限修飾符。
3.方法重寫時,子類的返回值類型必須要小于或者 等于父類的返回值類型。
4.方法重寫時, 子類拋出的異常類型要小于或者等于父類拋出的異常類型。
Exception(最壞)
RuntimeException(小壞)
方法的重載:在一個類中 存在兩個或者兩個 以上的同名函數(shù),稱作為方法重載。
方法重載的要求
1. 函數(shù)名要一致。
2. 形參列表不一致(形參的個數(shù)或形參 的類型不一致)
3. 與返回值類型無關(guān)。
- 靜態(tài)代碼塊、構(gòu)造代碼塊,構(gòu)造方法的執(zhí)行順序:
父類靜態(tài)代碼塊→子類靜態(tài)代碼塊→父類構(gòu)造代碼塊→父類構(gòu)造方法→子類構(gòu)造代碼塊→子類構(gòu)造方法
- instanceof 關(guān)鍵字
instanceof關(guān)鍵字的作用:判斷一個對象是否屬于指定的類別。
instanceof關(guān)鍵字的使用前提:判斷的對象與指定的類別必須要存在繼承或者實現(xiàn)的關(guān)系。
instanceof關(guān)鍵字的使用格式:
對象 instanceof 類別
instanceof關(guān)鍵字的作用: 目前沒用。但是后天我們學(xué)習(xí) 到了多態(tài)之后就非常有用。
一般我們做強(qiáng)制類型轉(zhuǎn)換之前都會使用該關(guān)鍵字先判斷一把,然后在進(jìn)行轉(zhuǎn)換的。
- final關(guān)鍵字
>每一個方法要運(yùn)行的時候,jvm虛擬機(jī)都會為該方法開辟一片存儲空間,方法中的形參也是屬于該方法的局部變量
final(最終、修飾符)
final關(guān)鍵字的用法:
1. final關(guān)鍵字修飾一個基本類型的變量時,該變量不能重新賦值,第一次的值為最終的。
2. fianl關(guān)鍵字修飾一個引用類型變量時,該變量不能重新指向新的對象。
3. final關(guān)鍵字修飾一個函數(shù)的時候,該函數(shù)不能被重寫。
4. final關(guān)鍵字修飾一個類的時候,該類不能被繼承。
常量 的修飾符一般為: public static final
常量的命名規(guī)范:全部字母大寫,單詞與單詞 之間 使用下劃線分隔。
比如 ```public static final double CIRCLE_PI = 3.14;```
- 抽象類:
>抽象類的應(yīng)用場景:
我們在描述一類事物的時候,發(fā)現(xiàn)該種事物確實存在著某種行為,
但是這種行為目前是不具體的,那么我們可以抽取這種行為 的聲明,但是
不去實現(xiàn)該種行為,這時候這種行為我們稱作為抽象的行為,我們就需要使用抽象類。
抽象類的好處: 強(qiáng)制要求子類一定要實現(xiàn)指定的方法。
抽象類要注意的細(xì)節(jié):
1. 如果一個函數(shù)沒有方法體,那么該函數(shù)必須要使用abstract修飾,把該函數(shù)修飾成抽象 的函數(shù)。。
2. 如果一個類出現(xiàn)了抽象的函數(shù),那么該類也必須 使用abstract修飾。
3. 如果一個非抽象類繼承了抽象類,那么必須要把抽象類的所有抽象方法全部實現(xiàn)。
4. 抽象類可以存在非抽象方法,也可以存在抽象的方法.
5. 抽象類可以不存在抽象方法的。
5. 抽象類是不能創(chuàng)建對象的。
疑問:為什么抽象類不能創(chuàng)建對象呢?
因為抽象類是存在抽象方法的,如果能讓抽象類創(chuàng)建對象的話,那么使用抽象的對象
調(diào)用抽象方法是沒有任何意義的。
6. 抽象類是存在構(gòu)造函數(shù)的,其構(gòu)造函數(shù)是提供給子類創(chuàng)建對象的時候初始化父類的屬性的。
abstract不能與以下關(guān)鍵字共同修飾一個方法:
1. abstract不能與private共同修飾一個方法。
2. abstract 不能與static共同修飾一個方法。
3. abstract 不能與final共同修飾一個方法。
值傳遞: 調(diào)用一個方法的時候,傳遞給方法的參數(shù) ,實際上傳遞變量所存儲的值。
- 接口:
>接口:接口是抽象方法和常量值的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類只包含常量和方法的定義,而沒有變量和方法的實現(xiàn)。
接口的出現(xiàn)將”多繼承“通過另一種形式體現(xiàn)出來,即”多實現(xiàn)“。
接口的定義格式:
interface 接口名{
}
接口要注意的事項 :
1. 接口是一個特殊的類。
2. 接口的成員變量默認(rèn)的修飾符為: public static final 。那么也就是說接口中的成員變量都是常量。
3. 接口中 的方法都是抽象的方法,默認(rèn)的修飾符為: public abstract。
4. 接口不能創(chuàng)建對象。
5. 接口是沒有構(gòu)造方法的。
6. 接口是給類去實現(xiàn)使用的,非抽象類實現(xiàn)一個接口的時候,必須要把接口中所有方法全部實現(xiàn)。
實現(xiàn)接口的格式:
class 類名 implements 接口名{
}
接口的成員特點:
接口中的成員修飾符是固定的!
成員常量:public static final,接口里定義的變量是全局常量,而且修飾符只能是這三個關(guān)鍵字,都可以省略,常量名要大寫。
成員方法:public abstract,接口里定義的方法都是抽象的,兩個修飾符關(guān)鍵字可省略。
推薦:永遠(yuǎn)手動給出修飾符。
類與接口之間關(guān)系: 實現(xiàn)關(guān)系。
類與接口要注意的事項:
1. 非抽象類實現(xiàn)一個接口時,必須要把接口中所有方法全部實現(xiàn)。
2. 抽象類實現(xiàn)一個接口時,可以實現(xiàn)也可以不實現(xiàn)接口中的 方法。
3. 一個類可以實現(xiàn)多個接口 。
接口與接口之間關(guān)系: 繼承關(guān)系。
接口與接口之間要注意事項:
一個接口是可以繼承多個接口的。比如, 以下Demo接口繼承了Print和Demo1接口
interface Demo extends Print, Demo1 {
}
interface Demo1 {
}
interface Print extends Eraser {
public abstract void println();
}
interface Eraser {
public static final double money = 1.0;
public abstract void remove(); /// 橡皮擦的功能
}
接口的思想特點:
接口是對外暴露的規(guī)則;
接口是程序的功能擴(kuò)展;
接口的出現(xiàn)降低耦合性;(實現(xiàn)了模塊化開發(fā),定義好規(guī)則,每個人實現(xiàn)自己的模塊,大大提高了開發(fā)效率)
接口可以用來多實現(xiàn);
多個無關(guān)的類可以實現(xiàn)同一個接口;
一個類可以實現(xiàn)多個相互直接沒有關(guān)系的接口;
與繼承關(guān)系類似,接口與實現(xiàn)類之間存在多態(tài)性。