繼承的本質(zhì)是對(duì)一批相似的類的抽象
繼承是類與類之間的關(guān)系
繼承關(guān)系的兩個(gè)類,一個(gè)為子類(派生類)啼染,一個(gè)為父類(基類)
extends : 延伸厂庇;擴(kuò)充;繼承
子類是父類的擴(kuò)展迷帜,也就是所謂的dlc
java中類只有單繼承物舒,沒有多繼承
所有類都繼承于Object
繼承的特性
子類擁有父類非 private 的屬性、方法戏锹。
子類可以擁有自己的屬性和方法冠胯,即子類可以對(duì)父類進(jìn)行擴(kuò)展。
子類可以用自己的方式實(shí)現(xiàn)父類的方法锦针。
Java 的繼承是單繼承荠察,但是可以多重繼承置蜀,單繼承就是一個(gè)子類只能繼承一個(gè)父類,多重繼承就是悉盆,例如 B 類繼承 A 類盯荤,C 類繼承 B 類,所以按照關(guān)系就是 B 類是 C 類的父類焕盟,A 類是 B 類的父類秋秤,這是 Java 繼承區(qū)別于 C++ 繼承的一個(gè)特性。
提高了類之間的耦合性(繼承的缺點(diǎn)脚翘,耦合度高就會(huì)造成代碼之間的聯(lián)系越緊密灼卢,代碼獨(dú)立性越差)。
調(diào)用子類的無參構(gòu)造時(shí)會(huì)先在子類的無參構(gòu)造內(nèi)調(diào)用父類的無參構(gòu)造
測(cè)試程序
包結(jié)構(gòu)
Father.java
/**
* 用于測(cè)試java的繼承類(順帶測(cè)試訪問修飾符)
*/
public class Father {
/**
*private (私有的)
* 私有:只有當(dāng)前類可以使用(不包括內(nèi)部類)
*/
private int pocket1 = 10_0000_0000;
/**
* default(不帶任何訪問修飾符)
* 默認(rèn):只有當(dāng)前類和同一個(gè)包下的可以訪問
*/
int pocket2 = 1_0000_0000;
/**
*protected(受保護(hù)的)
* 受保護(hù):當(dāng)前類和同一個(gè)包下的類以及子類都可訪問
*/
protected int pocket3 = 1_0000;
/**
*public(公共的)
* 公共:所有類都可訪問
*/
public int pocket4 = 2;
public class BigDaughter extends Father{
}
public static class SmallDaughter extends Father{
}
}
Son.java
public class Son extends Father {
}
WildSon.java
import OOP.extendsTest.Father;
public class WildSon extends Father {
}
TestExtends.java
關(guān)于方法的重寫
方法重寫来农,字面意思鞋真,重寫父類的方法,作用是使得在調(diào)用子類該名字方法時(shí)能調(diào)到與父類內(nèi)容的方法
規(guī)則:
名稱备图、返回類型灿巧、參數(shù)列表必須與被重寫的方法相同
訪問權(quán)限不能比被重寫的父級(jí)方法的訪問權(quán)限更低
final方法不可被重寫
構(gòu)造方法不可被重寫
子類和父類在同一包中時(shí)可以重寫父類除了private外的方法
子類和父類不在同一包中時(shí)只可以重寫public和protected的方法
重寫的方法可以用@Override注解進(jìn)行標(biāo)識(shí)
關(guān)于this關(guān)鍵字和super關(guān)鍵字
this:調(diào)用方法的這個(gè)對(duì)象
super:調(diào)用方法的對(duì)象的父類,只能出現(xiàn)在子類的方法中