<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Java 編程中的繼承 > 原文: [https://beginnersbook.com/2013/03/inheritance-in-java/](https://beginnersbook.com/2013/03/inheritance-in-java/) 一個類獲取另一個類的屬性(數據成員)和功能(方法)的過程稱為**繼承**。繼承的目的是提供代碼的可重用性,以便類只需要編寫唯一的特性,其余的公共屬性和功能可以從另一個類擴展。 **子類:** 擴展另一個類的特性的類稱為子類,子類或派生類。 **父類:** 其屬性和功能由另一個類使用(繼承)的類稱為父類,超類或基類。 > 繼承是通過擴展其公共數據成員和方法,基于現有類定義新類的過程。 > > 繼承允許我們重用代碼,它提高了 java 應用的可重用性。 > > 注意:繼承的最大**優勢是,基類中已經存在的代碼不需要在子類中重寫。** 這意味著父類的數據成員(實例變量)和方法可以在子類中使用。 > 如果您發現很難理解什么是類和對象,那么請參考我在面向對象編程上分享的指南:[OOP 概念](https://beginnersbook.com/2013/04/oops-concepts/)。 讓我們回到主題: ## 語法:Java 中的繼承 要繼承一個類,我們使用`extends`關鍵字。這里的類`XYZ`是子類,類`ABC`是父類。`XYZ`類繼承了`ABC`類的屬性和方法。 ```java class XYZ extends ABC { } ``` ## 繼承示例 在這個例子中,我們有一個基類`Teacher`和一個子類`PhysicsTeacher`。由于類`PhysicsTeacher`擴展了基類的`designation`和`collegeName`屬性以及`does()`方法,我們不需要在子類中聲明這些屬性和方法。 這里我們有`collegeName`,`designation`和`does()`方法,這些方法對于所有老師都是通用的,所以我們在基類中聲明了它們,這樣像`MathTeacher`,`MusicTeacher`和`PhysicsTeacher`這樣的子類不會需要編寫此代碼,可以直接從基類中使用。 ```java class Teacher { String designation = "Teacher"; String collegeName = "Beginnersbook"; void does(){ System.out.println("Teaching"); } } public class PhysicsTeacher extends Teacher{ String mainSubject = "Physics"; public static void main(String args[]){ PhysicsTeacher obj = new PhysicsTeacher(); System.out.println(obj.collegeName); System.out.println(obj.designation); System.out.println(obj.mainSubject); obj.does(); } } ``` 輸出: ```java Beginnersbook Teacher Physics Teaching ``` > 基于上述例子,我們可以說`PhysicsTeacher` **IS-A** `Teacher`。這意味著子類與父類具有 IS-A 關系。這是繼承被稱為子類和父類之間的 **IS-A 關系** **注意:** 派生類繼承聲明為`public`或`protected`的所有成員和方法。如果超類的成員或方法聲明為`private`,則派生類不能直接使用它們。私有成員只能在自己的類中訪問。只能使用公共或受保護的超類獲取器和設置器方法訪問此類私有成員,如下例所示。 ```java class Teacher { private String designation = "Teacher"; private String collegeName = "Beginnersbook"; public String getDesignation() { return designation; } protected void setDesignation(String designation) { this.designation = designation; } protected String getCollegeName() { return collegeName; } protected void setCollegeName(String collegeName) { this.collegeName = collegeName; } void does(){ System.out.println("Teaching"); } } public class JavaExample extends Teacher{ String mainSubject = "Physics"; public static void main(String args[]){ JavaExample obj = new JavaExample(); /* Note: we are not accessing the data members * directly we are using public getter method * to access the private members of parent class */ System.out.println(obj.getCollegeName()); System.out.println(obj.getDesignation()); System.out.println(obj.mainSubject); obj.does(); } } ``` 輸出是: ```java Beginnersbook Teacher Physics Teaching ``` 在上面的例子中需要注意的重要一點是,子類能夠通過父類的**受保護方法**訪問父類的私有成員。當我們創建一個實例變量(數據成員)或方法**受保護**時,這意味著它們只能在類本身和子類中訪問。這些公共,受保護,私有等都是訪問說明符,我們將在接下來的教程中討論它們。 ## 繼承的類型 要詳細了解繼承類型,請參閱: [Java 中的繼承類型](https://beginnersbook.com/2013/05/java-inheritance-types/)。 **單一繼承**:指的是一個子類和父類關系,其中一個類擴展另一個類。 ![Single Inheritance](https://img.kancloud.cn/e5/41/e541a2d39a9d64e4a3b94a937e07eb25_300x300.jpg) [多級繼承](https://beginnersbook.com/2013/12/multilevel-inheritance-in-java-with-example/):指一個類擴展子類的子類和父類關系。例如,`C`類擴展了`B`類,`B`類擴展了`A`類。 ![Multilevel Inheritance](https://img.kancloud.cn/ef/83/ef83c8ed391e20e12be47e5b5ee7db43_300x300.jpg) [分層繼承](https://beginnersbook.com/2013/10/hierarchical-inheritance-java-program/):指的是子類和父類關系,其中多個類擴展同一個類。例如,`B`,`C`和`B`類。`D`擴展了相同的`A`類。 ![Hierarchical Inheritance](https://img.kancloud.cn/c6/e3/c6e30dcadf345e9602e610b093f26b58_300x300.jpg) **多重繼承** :指一個類擴展多個類的概念,這意味著子類有兩個父類。例如,類`C`擴展了類`A`和`B`. Java 不支持多重繼承,請閱讀[多重繼承](https://beginnersbook.com/2013/05/java-multiple-inheritance/) 。 ![Multiple Inheritance](https://img.kancloud.cn/a0/c2/a0c2fabdeb2b8d2f804af2d619f90679_300x300.jpg) [混合繼承](https://beginnersbook.com/2013/10/hybrid-inheritance-java-program/):在單個程序中組合多種類型的繼承。例如`A`類和`A`類。`B`擴展了類`C`,另一個類`D`擴展了類`A`,然后這是一個混合繼承示例,因為它是單繼承和層次繼承的組合。 ## 構造函數和繼承 當我們創建子類的對象時,會調用子類的[構造函數](https://beginnersbook.com/2013/03/constructors-in-java/),它默認調用超類的默認構造函數。因此,在繼承中,對象是自上而下構造的。可以使用[`super`關鍵字](https://beginnersbook.com/2014/07/super-keyword-in-java-with-example/)顯式調用超類構造函數,但它應該是構造函數中的第一個語句。`super`關鍵字指的是超類,緊接在層次結構中的調用類之上。不允許使用多個`super`關鍵字來訪問除直接父級之外的祖先類。 ```java class ParentClass{ //Parent class constructor ParentClass(){ System.out.println("Constructor of Parent"); } } class JavaExample extends ParentClass{ JavaExample(){ /* It by default invokes the constructor of parent class * You can use super() to call the constructor of parent. * It should be the first statement in the child class * constructor, you can also call the parameterized constructor * of parent class by using super like this: super(10), now * this will invoke the parameterized constructor of int arg */ System.out.println("Constructor of Child"); } public static void main(String args[]){ //Creating the object of child class new JavaExample(); } } ``` 輸出: ```java Constructor of Parent Constructor of Child ``` ## 繼承和方法覆蓋 當我們在父類中已經存在的子類中聲明相同的方法時,這稱為[方法覆蓋](https://beginnersbook.com/2014/01/method-overriding-in-java-with-example/)。在這種情況下,當我們從子類對象調用該方法時,將調用該方法的子類版本。但是我們可以使用`super`關鍵字調用父類方法,如下例所示: ```java class ParentClass{ //Parent class constructor ParentClass(){ System.out.println("Constructor of Parent"); } void disp(){ System.out.println("Parent Method"); } } class JavaExample extends ParentClass{ JavaExample(){ System.out.println("Constructor of Child"); } void disp(){ System.out.println("Child Method"); //Calling the disp() method of parent class super.disp(); } public static void main(String args[]){ //Creating the object of child class JavaExample obj = new JavaExample(); obj.disp(); } } ``` 輸出是: ```java Constructor of Parent Constructor of Child Child Method Parent Method ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看