Java超詳細(xì)講解三大特性之一的繼承
繼承的概念
繼承就是子類繼承父類的特征和行為,使得子類對(duì)象(實(shí)例)具有父類的實(shí)例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。
通過(guò)繼承可以快速創(chuàng)建新的類,實(shí)現(xiàn)代碼的重用,提高程序的可維護(hù)性,節(jié)省大量創(chuàng)建新類的時(shí)間,提高開發(fā)效率和開發(fā)質(zhì)量。
繼承性的好處:
- 減少代碼的重復(fù)
- 提高代碼復(fù)用性
- 便于功能拓展
?繼承性的格式:class A extends B{}
A:子類,派生類,subclass,B: 父類 ,超類, 基類,superclass
體現(xiàn):一旦子類A繼承父類B之后,子類A中就獲取了父類B中聲明的所有的屬性和方法,特別的,父類中聲明為private的屬性或方法,子類繼承父類以后,仍然認(rèn)為獲取了父類中私有的結(jié)構(gòu),只有因?yàn)榉庋b性的影響,使得子類不能直接調(diào)用父類的結(jié)構(gòu)而已
子類繼承父類以后,還可以聲明自己特有的特有的屬性或方法:實(shí)現(xiàn)功能的拓展。而一個(gè)父類是可以有多個(gè)子類的,java中類的單繼承性:一個(gè)類只能有一個(gè)父類,子父類是相對(duì)的概念,子類直接繼承的父類,稱為:直接父類,間接繼承的父類稱為:間接父類,子類繼承父類以后,就獲取了直接父類以及所有間接父類中聲明的屬性和方法
如果我們沒有顯示的聲明一個(gè)類的父類的話,則此類繼承于java.lang.Object類,Object類是所有java類的根父類
繼承中需要注意的點(diǎn):
1.子類不能選擇性繼承父類;
2.Java不支持多重繼承,但一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,從而克服單繼承的缺點(diǎn);
3.構(gòu)造方法不會(huì)被子類繼承,但可以從子類中調(diào)用父類的構(gòu)造方法。
例如
class teacher{ //聲明一個(gè)teacher類為父類
String name; //定義父類的成員變量name、age
int age;
void show(){ //定義父類成員方法,將成員變量輸出
System.out.println(name);
System.out.println(age);
}
}
class Student extends teacher { //聲明一個(gè)Student類為子類并繼承父類
}
public class myfirst {
public static void main(String[] args) {
System.out.println("學(xué)生");
Student student=new Student(); //聲明一個(gè)Student類的實(shí)例對(duì)象student
student.name="Tom"; //子類調(diào)用父類的成員變量name并賦值
student.age=19; //子類調(diào)用父類的成員變量age并賦值
student.show(); //子類調(diào)用父類的成員方法show
}
}
方法的重寫
在實(shí)際應(yīng)用當(dāng)中,我們所寫的子父類的功能是不一樣的,這時(shí)我們就需要重寫或隱藏父類的該方法。
1重寫:子類繼承父類以后,可以對(duì)父類中同名同參數(shù)的方法,進(jìn)行覆蓋操作
2應(yīng)用:重寫以后,當(dāng)創(chuàng)建子類對(duì)象以后,通過(guò)子類對(duì)象調(diào)用子父類中的同名同參數(shù)的方法時(shí),實(shí)際執(zhí)行的是子類重寫父類的方法
3重寫的規(guī)定:
方法的聲明:
權(quán)限修飾符 返回值類型 方法名(形參列表)
子類中的叫重寫的方法,父類中的叫被重寫的方法,子類重寫的方法的方法名和形參列表與父類被重寫的方法的方法名和形參列表相同,子類重寫的方法的權(quán)限修飾符不小于父類被重寫的方法的權(quán)限修飾符 特殊情況:子類不能重寫父類中聲明為private權(quán)限的方法
關(guān)于返回值類型:
父類被重寫的方法的返回值類型是void,則子類重寫的方法的返回值類型只能是void,父類被重寫的方法的返回值類型是A類型,則子類重寫的方法的返回值類型可以是A類或A類的子類
父類被重寫的方法的返回值類型是基本數(shù)據(jù)類型(比如:double),則子類重寫的方法的返回值類型必須是相同的
子類和父類中的同名參數(shù)的方法都必須聲明為非static的才為重寫,為static的不是重寫
例如
class A{
public void sayHello() { //輸出英文歡迎
System.out.println("Hello,Welcome to Java!!!");
}
public void sayBye() {
System.out.println("GoodBye,everyone");
}
}
class B extends A {
public void sayHello() { //輸出中文歡迎
System.out.println("大家好,歡迎學(xué)習(xí)Java?。。?);
}
}
public class myfirst {
public static void main(String[] args) {
B b=new B(); //創(chuàng)建子類B的一個(gè)實(shí)例對(duì)象,使用默認(rèn)構(gòu)造方法
b.sayHello(); //調(diào)用子類中重寫的方法
b.sayBye(); //調(diào)用父類中的方法
}
}
super關(guān)鍵字的使用
super理解為:父類的,super可以用來(lái)調(diào)用、屬性、方法、構(gòu)造器
super的使用,我們可以在子類的方法或構(gòu)造器中。通過(guò)使用“super.屬性”或“super.方法”的方式,顯式的調(diào)用父類中聲明的屬性或方法,但是,通常情況下,我們習(xí)慣省略“super.
特殊情況:當(dāng)子類和父類中定義了同名的屬性時(shí),我們要想在子類中調(diào)用父類中聲明的屬性,則必須顯示的使用”super.屬性“的方式,表明調(diào)用的是父類中聲明的屬性。當(dāng)子類重寫了父類中的方法之后,我們想在子類中的方法中調(diào)用父類中被重寫的方法時(shí),則必須顯式的使用“super.方法”的方式,表明調(diào)用的是父類中被重寫的方法。
super調(diào)用構(gòu)造器
我們可以在子類的構(gòu)造器中顯式的使用“super(形參列表)”的方式,調(diào)用父類中聲明的指定的構(gòu)造器,"super(形參列表)"的使用,必須聲明在子類構(gòu)造器的首行,我們?cè)陬惖臉?gòu)造器中,針對(duì)于”this(形參列表)"或super(形參列表)“只能二選一,不能同時(shí)出現(xiàn),在構(gòu)造器的首行,沒有顯式的聲明”this(形參列表)“或”super(形參列表)“,調(diào)用父類中的構(gòu)造器
例如
package first;
class A{
public String name="張飛"; //添加成員變量
public void say() { //添加成員方法say
System.out.println("我是父類A成員方法say");
}
}
class B extends A{
public String name="關(guān)羽"; //與父類中同名的字段,隱藏父類
public void say(){ //重寫方法say
super.say(); //使用super關(guān)鍵字調(diào)用父類中的方法
System.out.println("我是子類B成員方法say");
System.out.println("父類的name名字:"+super.name); //使用super關(guān)鍵字訪問(wèn)父類中的變量
}
}
public class myfirst {
public static void main(String[] args) {
B b=new B(); //創(chuàng)建子類的一個(gè)實(shí)例對(duì)象
b.say(); //調(diào)用子類中重寫的方法
System.out.println("子類的name名字:"+b.name); //調(diào)用子類中的name
}
}
總結(jié)
今天學(xué)習(xí)了java中繼承的特性,方法的重寫,以及super關(guān)鍵字的使用。
到此這篇關(guān)于Java超詳細(xì)講解三大特性之一的繼承的文章就介紹到這了,更多相關(guān)Java繼承內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot啟動(dòng)訪問(wèn)localhost:8080報(bào)錯(cuò)404的解決操作
這篇文章主要介紹了SpringBoot啟動(dòng)訪問(wèn)localhost:8080報(bào)錯(cuò)404的解決操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
Spring?AOP?的實(shí)現(xiàn)和切點(diǎn)表達(dá)式的實(shí)現(xiàn)方式
本文給大家介紹了Spring?AOP的基本概念、通知類型、切點(diǎn)表達(dá)式和切面優(yōu)先級(jí),并通過(guò)示例代碼展示了如何實(shí)現(xiàn)這些功能,感興趣的朋友跟隨小編一起看看吧2024-12-12
Mybatis返回map集合時(shí),列的順序與select不一致問(wèn)題
這篇文章主要介紹了Mybatis返回map集合時(shí),列的順序與select不一致問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
SpringCloud負(fù)載均衡實(shí)現(xiàn)定向路由詳情
這篇文章主要介紹了SpringCloud負(fù)載均衡實(shí)現(xiàn)定向路由詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
完美解決IDEA Ctrl+Shift+f快捷鍵突然無(wú)效的問(wèn)題
這篇文章主要介紹了完美解決IDEA Ctrl+Shift+f快捷鍵突然無(wú)效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
idea切換分支的時(shí)候,忽略一些無(wú)用的修改設(shè)置
這篇文章主要介紹了idea切換分支的時(shí)候,忽略一些無(wú)用的修改操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
SpringBoot服務(wù)監(jiān)控機(jī)制原理解析(面試官常問(wèn))
這篇文章主要介紹了SpringBoot服務(wù)監(jiān)控機(jī)制原理解析(面試官常問(wèn)),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
SpringBoot多環(huán)境開發(fā)與日志小結(jié)
這篇文章主要介紹了SpringBoot多環(huán)境開發(fā)與日志,下面給大家說(shuō)一下如何基于多環(huán)境開發(fā)做配置獨(dú)立管理,務(wù)必掌握,需要的朋友可以參考下2022-08-08

