繼承是OOPS概念的重要特徵之一。它透過稱為子類別的另一個類別繼承稱為父類別的類別的功能,有助於程式碼的重複使用。當繼承擴展到超過 2 級時,稱為多級繼承。當一個新類別從派生自一個基底類別的類別派生特徵時,就稱為多層繼承。據說新類是父類的孫子類。
廣告 該類別中的熱門課程 JAVA 掌握 - 專業化 | 78 課程系列 | 15 次模擬測驗例如,A 是父類,B 類是其子類,C 是 B 的子類和 A 的孫子類。同樣,A 是 B 類的父類,C 類的祖父母。
讓我們來看看java中多層繼承的語法,如下所示:
class A{ //class A is parent of class B //class A is grand parent of class C public A(){ //A constructor } public void fun1(){ //function in Parent Class } } class B extends A{ //class B is a child class of class A //class B is a parent class of class C public B(){ //class B constructor } } class C extends B{ //class C is a child class of class B //class C is grand child class of class A public C(){ //Class C constructor } } public class Test{ public static void main(String[] args){ C obj = new C(); } }
要實現多層繼承,必須有一個基類,例如A。然後必須有一個衍生類別B,它擴充類別A,類別C擴充A。
多層級繼承是將一個衍生類別的功能擴展到另一個新類別的一種類型。由於父類別的功能被擴展到多個級別,因此這種類型的繼承稱為多級繼承。當子類別擴展父類別時,它可以使用父類別的所有功能。因此,如果有一個類別擴展了該派生類別的功能,那麼它被稱為基底類別的孫子,具有父類別和子類別的所有功能。
將類 A 視為父類,類 B 視為類 A 的子類,類 C 視為類 B 的子類。當為類別 C 建立物件時,請使用上面給出的 obj 。當我們宣告這個物件時,就會呼叫類別C的建構子。眾所周知,子類別的建構子會先呼叫其父類別的建構子。因此,當我們調用 C() 時,B() 建構函數就會被調用,而且,由於 B 是 B 類的子類,因此 A() 會被調用。然後控制權返回子類別。因此,在以下系列中,將執行建構子:
A() –>; B() – > C()但是,當使用子類別的此物件呼叫方法時,首先會檢查子類別中是否存在具有相同簽名的方法。如果沒有,則控制將定向到其父類別以查找該方法。因此,在這種情況下,當使用物件 obj 呼叫 fun1() 時,控制權會轉到 C 並發現沒有這樣的方法;因此,控制權會轉到 B,從而轉到 A 類別。
這樣做的原因是因為我們可以輕易地在子類別中重新定義父類別的方法,稱為方法重寫。因此,首先優先選擇被重寫的方法。這樣,多級繼承就實作了類別的多層繼承特性。這種類型的繼承最常在實現資料增強時使用,即在不更新現有程式碼的情況下增加現有資料的多樣性和數量的過程。它還有助於透過應用簡單的轉換來為可用的訓練模型引入可變性。
讓我們來看看java中多層級繼承的一些例子。
代碼:
class Electronics { public Electronics(){ System.out.println("Class Electronics"); } public void deviceType() { System.out.println("Device Type: Electronics"); } } class Television extends Electronics { public Television() { System.out.println("Class Television"); } public void category() { System.out.println("Category - Television"); } } class LED extends Television { public LED() { System.out.println("Class LED"); } public void display_tech() { System.out.println("Display Technology- LED"); } } public class Tester { public static void main(String[] arguments) { LED led = new LED(); led.deviceType(); led.category(); led.display_tech(); } }
輸出:
說明:在上面的範例中,Electronics 類別是一個通用類,為所有電子設備提供了 device_type() 方法。然後,我們有擴展 Electronics 類別的電視類,它指定 Electronics 設備,並有一個方法名稱 –category() 來顯示電子設備的類型。然後 LED 類別擴展了電視類別以指定用於其顯示的技術。它有方法display_tech()來顯示技術是LED。
在main方法中,當我們建立LED類別的物件時,我們用它來呼叫所有父類別的方法。當呼叫子類別的建構子時,首先呼叫父類別的建構子;因此,當呼叫 new LED() 時,首先呼叫 new Television() 。此外,在此建構函式中,新的 Electronics() 被呼叫並顯示 – 電子類別。
然後返回 Television 建構子並顯示 TV 類,然後返回 LED 類並顯示 - LED 類。當使用LED 類別的物件呼叫方法時,首先控制轉到LED 類別並嘗試查找方法– device_type() 並轉到Television 類別以查找在LED 類別中未找到該方法的方法,如果未找到該方法,則進一步尋找該方法在Television 類別中,也會轉到其進一步的超類別Electronics 並找到該方法並執行它。
多層繼承是一種很好的技術,可以實現繼承的主要優點,即透過多層實現程式碼的可重用性和可讀性。它有助於向現有代碼引入可變性和多樣性,從而提供基本培訓材料。此過程稱為程式碼文檔。
以上是Java中的多層繼承的詳細內容。更多資訊請關注PHP中文網其他相關文章!