Java繼承的問(wèn)題引導(dǎo)和測(cè)試代碼
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ù)以外的一切成員
為什么子類沒(méi)有繼承父類的構(gòu)造函數(shù) ?
父類構(gòu)造函數(shù)無(wú)法預(yù)知子類新增的屬性和方法,所以不能被繼承
2. 雖然子類繼承了父類的私有成員,但子類并不能直接訪問(wèn),如果想要訪問(wèn)私有成員必須借助父類的公共接口。
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() + "校長(zhǎng)"; } } public class Test { public static void main(String... args) { Teacher flameking = new Teacher(); System.out.println( flameking.getName() ); } }
測(cè)試結(jié)果:
小結(jié):
super.getName() + "校長(zhǎng)"; 這樣便能訪問(wèn)父類私有的 name 屬性 。所以在子類中可以通過(guò) super.父類公共接口 的形式,訪問(wèn)父類的私有成員。
3. 只支持單一繼承,不支持多重繼承,但支持多層繼承
解釋:除了Object 沒(méi)有父類,每個(gè)類有且僅有一個(gè)直接父類,如果沒(méi)有明確指出父類,Object 被認(rèn)為是這個(gè)類的父類。
也許有同學(xué)就會(huì)問(wèn)了,既然 Object 是所有類的父類,那么為什么還可以繼承其他類呢?
正如解釋里所說(shuō):“沒(méi)有明確指出父類,Object 被認(rèn)為是這個(gè)類的父類?!?/p>
沒(méi)有明確指出父類
public class Person {} public class Teacher {}
繼承關(guān)系是這樣的:
繼承后
public class Teacher extends Person{}
繼承關(guān)系如下:
也許有同學(xué)又會(huì)問(wèn):既然不能多重繼承了,那我要同時(shí)繼承多個(gè)類的功能該怎么辦呢?解決辦法如下:
// 第一種方式(✖️) 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í)繼承多個(gè)類的功能。
1.4、阻止繼承
當(dāng)我們?cè)趧?chuàng)建一個(gè)新類時(shí),現(xiàn)有某個(gè)類包含我們想要的代碼,那么讓這個(gè)新類繼承它,這樣我們就不用重新編寫代碼,就可以復(fù)用已存在的屬性和方法??墒怯心硞€(gè)同學(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)錯(cuò)提示:
final成員變量未顯式初始化
public class Person { private final String name; }
報(bào)錯(cuò)提示:
4. 常量定義的標(biāo)準(zhǔn)格式
public static final 數(shù)據(jù)類型 常量名=賦值
常量名:大寫字符,如果有多個(gè),用下劃線連接
private 修飾的類成員只能在類的內(nèi)部訪問(wèn),這是由面向?qū)ο蟮姆庋b性決定的
總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
java兩個(gè)integer數(shù)據(jù)判斷相等用==還是equals
本文主要介紹了java兩個(gè)integer數(shù)據(jù)判斷相等用==還是equals,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12spring cloud zuul修改請(qǐng)求url的方法
這篇文章主要給大家介紹了關(guān)于spring cloud zuul修改請(qǐng)求url的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring cloud具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-09-09Spring中Controller和RestController的區(qū)別詳解
這篇文章主要介紹了Spring中Controller和RestController的區(qū)別詳解,@Controller是標(biāo)識(shí)一個(gè)Spring類是Spring MVC controller處理器,@Controller類中的方法可以直接通過(guò)返回String跳轉(zhuǎn)到j(luò)sp、ftl、html等模版頁(yè)面,需要的朋友可以參考下2023-09-09如何使用Java將word解析出來(lái)(包含格式和圖片)
今天遇到一個(gè)讀取word模板內(nèi)容的需求,下面這篇文章主要給大家介紹了關(guān)于如何使用Java將word解析出來(lái),包含格式和圖片,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12