標籤:java繼承篇總結
繼承:
1)概念
把多個類中相同的成員給提取出來定義到一個獨立的類中。然後讓這多個類和該獨立的類產生一個關係,這多個類就具備了這些內容。這個關係叫繼承。
1.1)定義類時,通過“繼承”一個現有的類,子類可以具有父類中的所有屬性和方法。
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M01/8F/60/wKioL1jcoYWCepLuAABJiGUkQ5w141.png-wh_500x0-wm_3-wmp_4-s_221371410.png" title="圖片1.png" alt="wKioL1jcoYWCepLuAABJiGUkQ5w141.png-wh_50" />
2)Java中如何表示繼承呢?格式是什麼呢?
A:用關鍵字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)當對父類的方法進行重寫時,子類中的方法必須和父類中對應的方法具有相同的方法名稱、輸入參數(包括參數的個數和類型)和傳回值。
2.2.4)子類中的覆蓋方法不能使用比父類中被覆蓋方法更嚴格的存取權限。
package com.sp;public class Person extends Animal{//重寫run方法 重寫方法傳回型別、方法名、參數列表 和父類的這個方法的傳回型別一致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),來對類進行一些訪問上的控制。
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M00/8F/62/wKiom1jco0WDE3FAAAA6k0yiajo871.png-wh_500x0-wm_3-wmp_4-s_3351144495.png" title="2.png" alt="wKiom1jco0WDE3FAAAA6k0yiajo871.png-wh_50" />
3)繼承的好處:
A:提高了代碼的複用性
B:提高了代碼的維護性
C:讓類與類產生了一個關係,是多態的前提
4)繼承的弊端:
4.1):讓類的耦合性增強。這樣某個類的改變,就會影響其他和該類相關的類。
原則:低耦合,高內聚。
耦合:類與類的關係
4.2):打破了封裝性
5)Java中繼承的特點
5.1):Java中類只支援單繼承
5.2):Java中可以多層(重)繼承(繼承體系)
5.3):java.lang.Object類是所有類的父類
6)繼承的注意事項:
6.1):子類不能繼承父類的私人成員
6.2):子類不能繼承父類的構造方法,但是可以通過super去訪問
6.3):不要為了部分功能而去繼承
7)什麼時候使用繼承呢?
7.1):繼承體現的是:is a的關係。
7.2):採用假設法
8)Java繼承中的成員關係
8.1):成員變數
8.1.1):子類的成員變數名稱和父類中的成員變數名稱不一樣
8.1.2):子類的成員變數名稱和父類中的成員變數名稱一樣,這個怎麼訪問呢?
類的方法訪問變數的尋找順序:
在子類方法的局部範圍找,有就使用。
在子類的成員範圍找,有就使用。
在父類的成員範圍找,有就使用。
找不到,就報錯。
8.2):構造方法
8.2.1):子類的構造方法預設會去訪問父類的無參構造方法
是為了子類訪問父類資料的初始化
8.2.2):父類中如果沒有無參構造方法,怎麼辦?
子類通過super去明確調用帶參構造
子類通過this調用本身的其他構造,但是一定會有一個去訪問了父類的構造
讓父類提供無參構造
8.3):成員方法
a:子類的成員方法和父類中的成員方法名稱不一樣,這個太簡單
b:子類的成員方法和父類中的成員方法名稱一樣,這個怎麼訪問呢?
通過子類對象訪問一個方法的尋找順序:
在子類中找,有就使用
在父類中找,有就使用
找不到,就報錯
9)super關鍵字
9.1)作用(因學習他人,謝絕轉載,renzhiyuan.blog.51cto.com)
在Java類中使用super來引用父類的(屬性、方法和構造器)
super可用於訪問父類中定義的屬性
super可用於調用父類中定義的成員方法
super可用於在子類構造器中調用父類的構造器
9.2)調用父類構造器
在子類的構造器中一定要調用一次父類的構造器,系統預設調用的是父類無參數的構造器。
如果子類構造器中既未顯式調用父類構造器,而父類中又沒有無參的構造器,則編譯出錯
如果父類沒有無參數的構造器,在子類的構造器中可使用語句super()調用父類相應有參數的構造器
本文出自 “永不放棄!任志遠” 部落格,謝絕轉載!
Java繼承篇總結