您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Java面向對象之繼承的概念是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java面向對象之繼承的概念是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
繼承的概念
繼承是面向對象三大特征之一,可以使得子類具有父類的屬性和方法,還可以在子類中重新定義,以及追加屬性和方法
實現繼承的格式
繼承通過extends實現格式:class 子類 extends 父類 { } 舉例:class Dog extends Animal { }
繼承帶來的好處
繼承可以讓類與類之間產生關系,子父類關系,產生子父類后,子類則可以使用父類中非私有的成員。
示例代碼
public class Fu { public void show() { System.out.println("show方法被調用"); } } public class Zi extends Fu { public void method() { System.out.println("method方法被調用"); } } public class Demo { public static void main(String[] args) { //創建對象,調用方法 Fu f = new Fu(); f.show(); Zi z = new Zi(); z.method(); z.show(); } }
繼承好處
提高了代碼的復用性(多個類相同的成員可以放到同一個類中)
提高了代碼的維護性(如果方法的代碼需要修改,修改一處即可)
繼承弊端
繼承讓類與類之間產生了關系,類的耦合性增強了,當父類發生變化時子類實現也不得不跟著變化,削弱了子類的獨立性
繼承的應用場景:
is…a的關系:誰是誰的一種,例如:老師和學生是人的一種,那人就是父類,學生和老師就是子類
使用繼承,需要考慮類與類之間是否存在is…a的關系,不能盲目使用繼承
Java中繼承的特點
Java中類只支持單繼承,不支持多繼承
錯誤范例:class A extends B, C { }
Java中類支持多層繼承
多層繼承示例代碼:
public class Granddad { public void drink() { System.out.println("爺爺愛喝酒"); } } public class Father extends Granddad { public void smoke() { System.out.println("爸爸愛抽煙"); } } public class Mother { public void dance() { System.out.println("媽媽愛跳舞"); } } public class Son extends Father { // 此時,Son類中就同時擁有drink方法以及smoke方法 }
在子類方法中訪問一個變量,采用的是就近原則。
子類局部范圍找
子類成員范圍找
父類成員范圍找
如果都沒有就報錯(不考慮父親的父親…)
示例代碼
class Fu { int num = 10; } class Zi { int num = 20; public void show(){ int num = 30; System.out.println(num); } } public class Demo1 { public static void main(String[] args) { Zi z = new Zi(); z.show(); // 輸出show方法中的局部變量30 } }
this&super關鍵字:
this:代表本類對象的引用
super:代表父類存儲空間的標識(可以理解為父類對象引用)
this和super的使用分別
this(…) - 訪問本類構造方法
super(…) - 訪問父類構造方法
this.成員方法 - 訪問本類成員方法
super.成員方法 - 訪問父類成員方法
this.成員變量 - 訪問本類成員變量
super.成員變量 - 訪問父類成員變量
成員變量:
成員方法:
構造方法:
1、方法重寫概念 子類出現了和父類中一模一樣的方法聲明(方法名一樣,參數列表也必須一樣)
2、方法重寫的應用場景 當子類需要父類的功能,而功能主體子類有自己特有內容時,可以重寫父類中的方法,這樣,即沿襲了父類的功能,又定義了子類特有的內容
3、Override注解 用來檢測當前的方法,是否是重寫的方法,起到【校驗】的作用
方法重寫的注意事項
私有方法不能被重寫(父類私有成員子類是不能繼承的)
子類方法訪問權限不能更低(public > 默認 > 私有)
靜態方法不能被重寫,如果子類也有相同的方法,并不是重寫的父類的方法
示例代碼
public class Fu { private void show() { System.out.println("Fu中show()方法被調用"); } void method() { System.out.println("Fu中method()方法被調用"); } } public class Zi extends Fu { /* 編譯【出錯】,子類不能重寫父類私有的方法*/ @Override private void show() { System.out.println("Zi中show()方法被調用"); } /* 編譯【出錯】,子類重寫父類方法的時候,訪問權限需要大于等于父類 */ @Override private void method() { System.out.println("Zi中method()方法被調用"); } /* 編譯【通過】,子類重寫父類方法的時候,訪問權限需要大于等于父類 */ @Override public void method() { System.out.println("Zi中method()方法被調用"); } }
讀到這里,這篇“Java面向對象之繼承的概念是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。