Java繼承的問題引導(dǎo)和測試代碼
1.1、定義
從現(xiàn)有類派生的類被稱作子類,也叫派生類,擴(kuò)展類,或孩子類?,F(xiàn)有類被稱作超類,也叫基類,或父類。
1.2、創(chuàng)建子類
public class Person {}
public class Teacher extends Person{}
1.3、繼承的基本規(guī)則
1. 子類可以繼承除父類構(gòu)造函數(shù)以外的一切成員
為什么子類沒有繼承父類的構(gòu)造函數(shù) ?
父類構(gòu)造函數(shù)無法預(yù)知子類新增的屬性和方法,所以不能被繼承
2. 雖然子類繼承了父類的私有成員,但子類并不能直接訪問,如果想要訪問私有成員必須借助父類的公共接口。
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Teacher extends Person{
// 方法覆蓋
public String getName() {
// super 調(diào)用父類的功能接口
return super.getName() + "校長";
}
}
public class Test {
public static void main(String... args) {
Teacher flameking = new Teacher();
System.out.println( flameking.getName() );
}
}
測試結(jié)果:

小結(jié):
super.getName() + "校長"; 這樣便能訪問父類私有的 name 屬性 。所以在子類中可以通過 super.父類公共接口 的形式,訪問父類的私有成員。
3. 只支持單一繼承,不支持多重繼承,但支持多層繼承
解釋:除了Object 沒有父類,每個類有且僅有一個直接父類,如果沒有明確指出父類,Object 被認(rèn)為是這個類的父類。
也許有同學(xué)就會問了,既然 Object 是所有類的父類,那么為什么還可以繼承其他類呢?
正如解釋里所說:“沒有明確指出父類,Object 被認(rèn)為是這個類的父類?!?/p>
沒有明確指出父類
public class Person {}
public class Teacher {}
繼承關(guān)系是這樣的:

繼承后
public class Teacher extends Person{}
繼承關(guān)系如下:

也許有同學(xué)又會問:既然不能多重繼承了,那我要同時(shí)繼承多個類的功能該怎么辦呢?解決辦法如下:
// 第一種方式(✖️)
public class Person {}
public class Employee {}
public class Teacher extends Person,Employee {}
// 第二種方式(✔️)
public class Person {}
public class Employee extends Person {}
public class Teacher extends Employee {}
小結(jié):
如上,既然不能多重繼承,那么利用多層繼承的方式便能同時(shí)繼承多個類的功能。
1.4、阻止繼承
當(dāng)我們在創(chuàng)建一個新類時(shí),現(xiàn)有某個類包含我們想要的代碼,那么讓這個新類繼承它,這樣我們就不用重新編寫代碼,就可以復(fù)用已存在的屬性和方法??墒怯心硞€同學(xué)他偏偏不想讓別人利用他的代碼…
那他怎么做才能讓自己的代碼不被別人繼承呢?
1.4.1、final修飾符
1. final 修飾的類不能被繼承
使用方法:
public final class Person {}
效果顯示:

2. final 修飾的方法不能被覆蓋
3. final 修飾的變量(成員變量和局部變量)必須顯式初始化,且只能初始化一次。
修改 final 局部變量 的取值
public class Test {
public static void main(String... args) {
final int temp;
temp = 1;
temp = 2;
}
}
報(bào)錯提示:

final成員變量未顯式初始化
public class Person {
private final String name;
}
報(bào)錯提示:

4. 常量定義的標(biāo)準(zhǔn)格式
public static final 數(shù)據(jù)類型 常量名=賦值
常量名:大寫字符,如果有多個,用下劃線連接
private 修飾的類成員只能在類的內(nèi)部訪問,這是由面向?qū)ο蟮姆庋b性決定的
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
JavaWeb中Tomcat底層機(jī)制和Servlet運(yùn)行原理詳解
這篇文章主要介紹了JavaWeb中Tomcat底層機(jī)制和Servlet運(yùn)行原理詳解,Tomcat是一個開源的Java Web服務(wù)器,它是基于Java Servlet和JavaServer Pages(JSP)技術(shù)的,下面是關(guān)于Tomcat底層機(jī)制和Servlet運(yùn)行原理的簡要說明,需要的朋友可以參考下2023-10-10
Spring?Boot深入學(xué)習(xí)數(shù)據(jù)訪問之Spring?Data?JPA與Hibernate的應(yīng)用
Spring?Data?JPA是Spring?Data的子項(xiàng)目,在使用Spring?Data?JPA之前,先了解一下Hibernate,因?yàn)镾pring?Data?JPA是由Hibernate默認(rèn)實(shí)現(xiàn)的2022-10-10
Java實(shí)戰(zhàn)之實(shí)現(xiàn)物流配送系統(tǒng)示例詳解
這篇文章主要介紹了一個java實(shí)戰(zhàn)項(xiàng)目:通過java、SSM、JSP、mysql和redis實(shí)現(xiàn)一個物流配送系統(tǒng)。文中的示例代碼非常詳細(xì),需要的朋友可以參考一下2021-12-12
springMVC的RequestMapping請求不到路徑的解決
這篇文章主要介紹了springMVC的RequestMapping請求不到路徑的解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
Java中轉(zhuǎn)義字符反斜杠\的代替方法及repalceAll內(nèi)涵解析
這篇文章主要介紹了Java中轉(zhuǎn)義字符反斜杠\的代替方法及repalceAll內(nèi)涵解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Java TimeoutException:服務(wù)調(diào)用超時(shí)異常的正確解決方案
在現(xiàn)代軟件開發(fā)中,服務(wù)間通信是構(gòu)建分布式系統(tǒng)的基礎(chǔ),然而,網(wǎng)絡(luò)延遲、服務(wù)負(fù)載、資源競爭等因素都可能導(dǎo)致服務(wù)調(diào)用超時(shí),TimeoutException是Java中表示服務(wù)調(diào)用超時(shí)的常見異常之一,本文將探討TimeoutException的成因及解決方案,需要的朋友可以參考下2024-12-12

