繼承:
1)概念
把多個類中相同的成員給提取出來定義到一個獨立的類中朽基。然后讓這多個類和該獨立的類產(chǎn)生一個關(guān)系,這多個類就具備了這些內(nèi)容余爆。這個關(guān)系叫繼承。
1.1)定義類時硕舆,通過“繼承”一個現(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("這只動物正在奔跑");
}
}
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)當子類繼承父類時抚官,可以從父類繼承它的屬性和方法扬跋。
2.2.2)如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫凌节,這個過程叫方法的覆蓋(override)钦听,也稱為方法的重寫。
2.2.3)當對父類的方法進行重寫時倍奢,子類中的方法必須和父類中對應的方法具有相同的方法名稱朴上、輸入?yún)?shù)(包括參數(shù)的個數(shù)和類型)和返回值。
2.2.4)子類中的覆蓋方法不能使用比父類中被覆蓋方法更嚴格的訪問權(quán)限卒煞。
package com.sp;
public class Person extends Animal{
//重寫run方法 重寫方法返回類型痪宰、方法名、參數(shù)列表 和父類的這個方法的返回類型一致
public void run(){
System.out.println("這個人正在奔跑吧 畔裕,兄弟");
}
//重寫sing方法
public boolean sing(String name){
System.out.println("這個人正在唱歌");
return true;
}
public static void main(String[] args) {
Person p = new Person();
p.name="TOM";
p.color="白色" ;
p.run();
p.sing("");
}
}
2.3)訪問控制:
在Java中衣撬,可以在類、類的屬性以及類的方法前面加上一個修飾符(modifier)扮饶,來對類進行一些訪問上的控制具练。
3)繼承的好處:
A:提高了代碼的復用性
B:提高了代碼的維護性
C:讓類與類產(chǎn)生了一個關(guān)系,是多態(tài)的前提
4)繼承的弊端:
4.1):讓類的耦合性增強贴届。這樣某個類的改變靠粪,就會影響其他和該類相關(guān)的類。
原則:低耦合毫蚓,高內(nèi)聚。
耦合:類與類的關(guān)系
4.2):打破了封裝性
5)Java中繼承的特點
5.1):Java中類只支持單繼承
5.2):Java中可以多層(重)繼承(繼承體系)
5.3):java.lang.Object類是所有類的父類
6)繼承的注意事項:
6.1):子類不能繼承父類的私有成員
6.2):子類不能繼承父類的構(gòu)造方法昔善,但是可以通過super去訪問
6.3):不要為了部分功能而去繼承
7)什么時候使用繼承呢?
7.1):繼承體現(xiàn)的是:is a的關(guān)系元潘。
7.2):采用假設(shè)法
8)Java繼承中的成員關(guān)系
8.1):成員變量
8.1.1):子類的成員變量名稱和父類中的成員變量名稱不一樣
8.1.2):子類的成員變量名稱和父類中的成員變量名稱一樣,這個怎么訪問呢?
類的方法訪問變量的查找順序:
在子類方法的局部范圍找君仆,有就使用翩概。
在子類的成員范圍找,有就使用返咱。
在父類的成員范圍找钥庇,有就使用。
找不到咖摹,就報錯评姨。
8.2):構(gòu)造方法
8.2.1):子類的構(gòu)造方法默認會去訪問父類的無參構(gòu)造方法
是為了子類訪問父類數(shù)據(jù)的初始化
8.2.2):父類中如果沒有無參構(gòu)造方法,怎么辦?
子類通過super去明確調(diào)用帶參構(gòu)造
子類通過this調(diào)用本身的其他構(gòu)造萤晴,但是一定會有一個去訪問了父類的構(gòu)造
讓父類提供無參構(gòu)造
8.3):成員方法
a:子類的成員方法和父類中的成員方法名稱不一樣吐句,這個太簡單
b:子類的成員方法和父類中的成員方法名稱一樣胁后,這個怎么訪問呢?
通過子類對象訪問一個方法的查找順序:
在子類中找,有就使用
在父類中找嗦枢,有就使用
找不到攀芯,就報錯
9)super關(guān)鍵字
9.1)作用(因?qū)W習他人,謝絕轉(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)默認調(diào)用的是父類無參數(shù)的構(gòu)造器氧秘。
如果子類構(gòu)造器中既未顯式調(diào)用父類構(gòu)造器紧武,而父類中又沒有無參的構(gòu)造器,則編譯出錯
如果父類沒有無參數(shù)的構(gòu)造器敏储,在子類的構(gòu)造器中可使用語句super()調(diào)用父類相應有參數(shù)的構(gòu)造器
歡迎工作一到五年的Java工程師朋友們加入Java高級互聯(lián)網(wǎng)架構(gòu):957734884
群內(nèi)提供免費的Java架構(gòu)學習資料(里面有高可用阻星、高并發(fā)、高性能及分布式已添、Jvm性能調(diào)優(yōu)妥箕、Spring源碼,MyBatis更舞,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構(gòu)資料)合理利用自己每一分每一秒的時間來學習提升自己畦幢,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕缆蝉,使勁拼宇葱,給未來的自己一個交代!