<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Java 繼承 > 原文: [https://howtodoinjava.com/oops/java-inheritance/](https://howtodoinjava.com/oops/java-inheritance/) Java 中的**繼承(IS-A 關系)** 是指子對象繼承或從父對象獲取所有屬性和行為的能力。 在面向對象的編程中,繼承用于提升代碼的可重用性。 在本 Java 教程中,我們將學習 Java 支持的**繼承類型**和 Java 應用程序中**如何實現繼承**。 ```java Table of Contents 1\. What is inheritance 2\. Types of Inheritance in Java - 2.1\. Single Inheritance - 2.2\. Multilevel Inheritance - 2.3\. Hierarchical Inheritance - 2.4\. Multiple inheritance 3\. Accessing Inherited Super Class Members - 3.1\. Constructors - 3.2\. Fields - 3.3\. Methods 4\. Summary ``` ## 1\. Java 中的繼承是什么 如前所述,繼承就是通過派生類(子類或子類)繼承父類(超類)的**公共狀態和行為**。 默認情況下,子類可以繼承超類的所有**非私有成員**。 在 Java 中,關鍵字`extends`用于類之間的繼承。 我們來看一個快速繼承的例子。 #### 1.1 Java 繼承示例 假設我們有`Employee`類。 雇員類具有組織中所有雇員必須具有的所有公共屬性和方法。 也可以有其他專業員工,例如 `Manager`。 經理是組織的正式員工,但與其他員工相比,他們的屬性卻很少。 他們有報告人或下屬。 讓我們設計以上類。 ```java public class Employee { private Long id; private String firstName; private String lastName; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } @Override public String toString() { return "Employee [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + "]"; } } ``` ```java import java.util.List; public class Manager extends Employee { private List<Employee> subordinates; public List<Employee> getSubordinates() { return subordinates; } public void setSubordinates(List<Employee> subordinates) { this.subordinates = subordinates; } @Override public String toString() { return "Manager [subordinates=" + subordinates + ", details=" + super.toString() + "]"; } } ``` 在上述實現中,員工具有`id`,`firstName`和`lastName`之類的公共屬性; 而經理僅具有專門的`subordinates`屬性。 要從`Employee`類繼承所有非私有成員(在本例中為獲取器和設置器方法),請使用`Manager extends Employee`。 讓我們看看它是如何工作的? ```java public class Main { public static void main(String[] args) { Manager mgr = new Manager(); mgr.setId(1L); mgr.setFirstName("Lokesh"); mgr.setLastName("Gupta"); System.out.println(mgr); } } ``` 程序輸出。 ```java Manager [subordinates=null, details=Employee [id=1, firstName=Lokesh, lastName=Gupta]] ``` 顯然,`Manager`類可以使用`Employee`類的成員。 這種行為稱為繼承。 很簡單,不是嗎? 現在考慮是否不使用繼承。 然后,我們將在兩個類中都定義`id`,`firstName`和`lastName`。 這會導致代碼重復,這總是在代碼維護中造成問題。 ## 2\. Java 中的繼承類型 在 Java 中,繼承可以是**四種類型**之一 - 取決于類層次結構。 讓我們了解所有四種繼承。 #### 2.1 單繼承 這很簡單。 有一個父類和一個子類。 **一個子類擴展了一個父類**。 它是單一繼承。 上面的示例代碼(員工和管理者)是單繼承的示例。 ![Java Single Inheritance](https://img.kancloud.cn/3c/c3/3cc3b05da97f66094097dfad95f25def_356x296.png) Java 單繼承 #### 2.2 多級繼承 在多級繼承中,將在三個以上的類之間進行繼承,使得**子類將充當另一個子類**的父類。 讓我們用一個圖表來理解。 ![Multilevel Inheritance](https://img.kancloud.cn/25/d1/25d15e6358be9464455110b61cf4f609_338x425.png) 多級繼承 在上面的示例中,類`B`擴展了類`A`,因此類`B`是類`A`的子類。 但是`C`擴展了`B`,因此`B`是`C`的父類。 因此`B`既是父類,也是子類。 #### 2.3 分層繼承 在分層繼承中,有一個超類,并且有多個子類擴展了超類。 ![Hierarchical Inheritance](https://img.kancloud.cn/e5/1d/e51d5e3b9df5646f5fe53c1562ec8f78_385x296.png) 分層繼承 這些子類`B`,`C`和`D`將共享從`A`繼承的公共成員,但是它們彼此之間不會相互意識到。 #### 2.4 多重繼承 在多重繼承中,一個類也可以從多個父類中繼承行為。 讓我們來了解一下圖表。 ![Multiple inheritance](https://img.kancloud.cn/93/af/93af1a56305957d046486c58311334f6_555x368.png) 多重繼承 在圖中,`D`擴展了`A`和`B`類。 這樣,`D`可以繼承兩個類的非私有成員。 但是,在 Java 中,不能將`extends`關鍵字用于兩個類。 那么,多重繼承將如何工作? > 直到 JDK 1.7,在 Java 中都無法進行多重繼承。 但是從 JDK 1.8 開始,可以通過使用具有默認方法的接口來實現[多重繼承](//howtodoinjava.com/object-oriented/multiple-inheritance-in-java/)。 ## 3\. 訪問被繼承的父類成員 現在我們知道,使用四種類型的繼承機制,我們可以訪問父類的非私有成員。 讓我們看看如何訪問單個成員。 #### 3.1 父類的構造器 可以通過`super`關鍵字來調用超類的構造器。 只有兩個規則: 1. `super()`調用必須從子類構造器進行。 2. `super()`調用必須是構造器中的第一條語句。 ```java public class Manager extends Employee { public Manager() { //This must be first statement inside constructor super(); //Other code after super class } } ``` #### 3.2 父類字段 在 Java 中,非私有成員字段可以在子類中繼承。 您可以使用點運算符來訪問它們,例如 `manager.id`。 這里`id`屬性是從父類`Employee`繼承的。 在父類和子類中處理具有相同名稱的字段時,需要小心。 請記住, **java 字段不能被覆蓋**。 具有相同名稱的字段會在通過子類訪問時對父類隱藏該字段。 在這種情況下,將基于引用類型的**類來確定訪問的屬性。** ```java ReferenceClass variable = new ActualClass(); ``` 在上述情況下,將從`ReferenceClass`訪問成員字段。 例如 ```java //Parent class public class Employee { public Long id = 10L; } //Child class public class Manager extends Employee { public Long id = 20L; //same name field } public class Main { public static void main(String[] args) { Employee manager = new Manager(); System.out.println(manager.id); //Reference of type Employee Manager mgr = new Manager(); System.out.println(mgr.id); //Reference of type Manager } } Output: 10 20 ``` #### 3.3 父類方法 與字段訪問相反,方法訪問使用在運行時創建的實際對象的類型。 ```java ReferenceClass variable = new ActualClass(); ``` 在上述情況下,將從`ActualClass`訪問成員方法。 例如 ```java public class Employee { private Long id = 10L; public Long getId() { return id; } } public class Manager extends Employee { private Long id = 20L; public Long getId() { return id; } } public class Main { public static void main(String[] args) { Employee employee = new Employee(); //Actual object is Employee Type System.out.println(employee.getId()); Employee manager = new Manager(); //Actual object is Manager Type System.out.println(manager.getId()); Manager mgr = new Manager(); //Actual object is Manager Type System.out.println(mgr.getId()); } } Output: 10 20 20 ``` ## 4\. 總結 讓我們總結一下我們對 **java 繼承**的了解: * 繼承也稱為 **IS-A** 關系。 * 它為子類提供了繼承父類的非私有成員的能力。 * 在 Java 中,繼承是通過`extends`關鍵字實現的。 * 從 [Java 8](//howtodoinjava.com/java-8-tutorial/) 開始,您可以使用具有默認方法的接口來實現多重繼承。 * 成員字段從引用類型類訪問。 * 成員方法從實際實例類型訪問。 如果有任何問題,請在評論部分中向我發送。 學習愉快!
                  <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>

                              哎呀哎呀视频在线观看