Java繼承篇總結(jié)

繼承:

1)概念

把多個(gè)類中相同的成員給提取出來定義到一個(gè)獨(dú)立的類中。然后讓這多個(gè)類和該獨(dú)立的類產(chǎn)生一個(gè)關(guān)系,這多個(gè)類就具備了這些內(nèi)容。這個(gè)關(guān)系叫繼承。

1.1)定義類時(shí),通過“繼承”一個(gè)現(xiàn)有的類,子類可以具有父類中的所有屬性和方法。

2)Java中如何表示繼承呢?格式是什么呢?

A:用關(guān)鍵字extends表示

B:格式:

class 子類名 extends 父類名 {}

2.1)案例

public class Animal {
String name;
String color;
public void run(){System.out.println("這只動(dòng)物正在奔跑");
}

}
package com.sp;
public class Person extends Animal{
public static void main(String[] args) {
Person p = new Person();
p.name="TOM";
p.color="白色" ;
p.run();
}
}

2.2)方法重載

2.2.1)當(dāng)子類繼承父類時(shí),可以從父類繼承它的屬性和方法。

2.2.2)如果從父類繼承的方法不能滿足子類的需求,可以對(duì)其進(jìn)行改寫,這個(gè)過程叫方法的覆蓋(override),也稱為方法的重寫。

2.2.3)當(dāng)對(duì)父類的方法進(jìn)行重寫時(shí),子類中的方法必須和父類中對(duì)應(yīng)的方法具有相同的方法名稱、輸入?yún)?shù)(包括參數(shù)的個(gè)數(shù)和類型)和返回值。

2.2.4)子類中的覆蓋方法不能使用比父類中被覆蓋方法更嚴(yán)格的訪問權(quán)限。

package com.sp;
public class Person extends Animal{
//重寫run方法   重寫方法返回類型、方法名、參數(shù)列表  和父類的這個(gè)方法的返回類型一致
public void run(){
System.out.println("這個(gè)人正在奔跑吧 ,兄弟");
}
//重寫sing方法 
public boolean sing(String name){
System.out.println("這個(gè)人正在唱歌");
return true;
}
public static void main(String[] args) {
Person p = new Person();
p.name="TOM";
p.color="白色" ;
p.run();
p.sing("");
}
}

2.3)訪問控制:

在Java中,可以在類、類的屬性以及類的方法前面加上一個(gè)修飾符(modifier),來對(duì)類進(jìn)行一些訪問上的控制。

3)繼承的好處:

A:提高了代碼的復(fù)用性

B:提高了代碼的維護(hù)性

C:讓類與類產(chǎn)生了一個(gè)關(guān)系,是多態(tài)的前提

4)繼承的弊端:

4.1):讓類的耦合性增強(qiáng)。這樣某個(gè)類的改變,就會(huì)影響其他和該類相關(guān)的類。

原則:低耦合,高內(nèi)聚。

耦合:類與類的關(guān)系

4.2):打破了封裝性

5)Java中繼承的特點(diǎn)

5.1):Java中類只支持單繼承

5.2):Java中可以多層(重)繼承(繼承體系)

5.3):java.lang.Object類是所有類的父類

6)繼承的注意事項(xiàng):

6.1):子類不能繼承父類的私有成員

6.2):子類不能繼承父類的構(gòu)造方法,但是可以通過super去訪問

6.3):不要為了部分功能而去繼承

7)什么時(shí)候使用繼承呢?

7.1):繼承體現(xiàn)的是:is a的關(guān)系。

7.2):采用假設(shè)法

8)Java繼承中的成員關(guān)系

8.1):成員變量

8.1.1):子類的成員變量名稱和父類中的成員變量名稱不一樣

8.1.2):子類的成員變量名稱和父類中的成員變量名稱一樣,這個(gè)怎么訪問呢?

類的方法訪問變量的查找順序:

在子類方法的局部范圍找,有就使用。

在子類的成員范圍找,有就使用。

在父類的成員范圍找,有就使用。

找不到,就報(bào)錯(cuò)。

8.2):構(gòu)造方法

8.2.1):子類的構(gòu)造方法默認(rèn)會(huì)去訪問父類的無參構(gòu)造方法

是為了子類訪問父類數(shù)據(jù)的初始化

8.2.2):父類中如果沒有無參構(gòu)造方法,怎么辦?

子類通過super去明確調(diào)用帶參構(gòu)造

子類通過this調(diào)用本身的其他構(gòu)造,但是一定會(huì)有一個(gè)去訪問了父類的構(gòu)造

讓父類提供無參構(gòu)造

8.3):成員方法

a:子類的成員方法和父類中的成員方法名稱不一樣,這個(gè)太簡單

b:子類的成員方法和父類中的成員方法名稱一樣,這個(gè)怎么訪問呢?

通過子類對(duì)象訪問一個(gè)方法的查找順序:

在子類中找,有就使用

在父類中找,有就使用

找不到,就報(bào)錯(cuò)

9)super關(guān)鍵字

9.1)作用(因?qū)W習(xí)他人,謝絕轉(zhuǎn)載,renzhiyuan.blog.51cto.com)

在Java類中使用super來引用父類的(屬性、方法和構(gòu)造器)

super可用于訪問父類中定義的屬性

super可用于調(diào)用父類中定義的成員方法

super可用于在子類構(gòu)造器中調(diào)用父類的構(gòu)造器

9.2)調(diào)用父類構(gòu)造器

在子類的構(gòu)造器中一定要調(diào)用一次父類的構(gòu)造器,系統(tǒng)默認(rèn)調(diào)用的是父類無參數(shù)的構(gòu)造器。

如果子類構(gòu)造器中既未顯式調(diào)用父類構(gòu)造器,而父類中又沒有無參的構(gòu)造器,則編譯出錯(cuò)

如果父類沒有無參數(shù)的構(gòu)造器,在子類的構(gòu)造器中可使用語句super()調(diào)用父類相應(yīng)有參數(shù)的構(gòu)造器

歡迎工作一到五年的Java工程師朋友們加入Java高級(jí)互聯(lián)網(wǎng)架構(gòu):957734884
群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)、高性能及分布式、Jvm性能調(diào)優(yōu)、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來學(xué)習(xí)提升自己,不要再用"沒有時(shí)間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個(gè)交代!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,813評(píng)論 0 11
  • 一:java概述: 1,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)...
    慕容小偉閱讀 1,946評(píng)論 0 10
  • 整理來自互聯(lián)網(wǎng) 1,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工具...
    Ncompass閱讀 1,618評(píng)論 0 6
  • 父類與子類 在Java術(shù)語中,如果C1類擴(kuò)展自另一個(gè)類C2,我們稱C2為父類,也稱超類或基類,稱C1為子類,也稱次...
    Steven1997閱讀 1,322評(píng)論 1 2
  • 下班路上,在某公號(hào)看到一篇文章,不停成長的人總會(huì)善于自我復(fù)盤。 最近處于自我審視和團(tuán)隊(duì)初長成的階段,很大程度需要冷...
    荷顏閱讀 1,033評(píng)論 0 0

友情鏈接更多精彩內(nèi)容