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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Java 繼承 > 原文: [https://www.programiz.com/java-programming/inheritance](https://www.programiz.com/java-programming/inheritance) #### 在本教程中,我們將借助示例學習 Java 中的繼承。 繼承是 OOP(面向對象編程)的關鍵功能之一,它使我們能夠從現有類中定義一個新類。 例如, ```java class Animal { // eat() method // sleep() method } class Dog extends Animal { // bark() method } ``` 在 Java 中,我們使用`extends`關鍵字從類繼承。 在這里,我們從`Animal`類繼承了`Dog`類。 `Animal`是超類(父類或基類),`Dog`是子類(子類或派生類)。 子類繼承超類的字段和方法。 ![Java Inheritance Introduction](https://img.kancloud.cn/a2/44/a2445569e56c0cd9d3677e04c04d5f25_714x886.png) * * * ## IS-A 關系 繼承是 **is-a** 關系。 僅當兩個類之間存在 **is-a** 關系時才使用繼承。 這里有些例子: * 汽車是車輛。 * 橙色是水果。 * 外科醫生是醫生。 * 狗是動物。 * * * ### 示例 1:Java 繼承 ```java class Animal { public void eat() { System.out.println("I can eat"); } public void sleep() { System.out.println("I can sleep"); } } class Dog extends Animal { public void bark() { System.out.println("I can bark"); } } class Main { public static void main(String[] args) { Dog dog1 = new Dog(); dog1.eat(); dog1.sleep(); dog1.bark(); } } ``` **輸出** ```java I can eat I can sleep I can bark ``` 在這里,我們從超類`Animal`繼承了子類`Dog`。`Dog`類繼承了`Animal`類的方法`eat()`和`sleep()`。 因此,`Dog`類的對象可以訪問`Dog`類和`Animal`類的成員。 ![In Java inheritance, objects of subclass can call members of superclass.](https://img.kancloud.cn/02/8d/028d4b1818d790c38e7e306e81b10c64_934x808.png) * * * ## `protected`關鍵字 在先前的教程中,我們了解了`private`和`public`訪問修飾符。 * `private`成員只能在類內訪問 * `public`成員可以從任何地方訪問 您還可以分配方法和字段`protected`。 受保護的成員可以訪問 * 從類內部 * 在其子類中 * 在同一包內 這是可以訪問訪問修飾符的摘要。 | ? | 類 | 包 | 子類 | 全局 | | --- | --- | --- | --- | --- | | `public` | Yes | Yes | Yes | Yes | | `private` | Yes | No | No | No | | `protected` | Yes | Yes | Yes | No | * * * ### 示例 2:`protected`關鍵字 ```java class Animal { protected String type; private String color; public void eat() { System.out.println("I can eat"); } public void sleep() { System.out.println("I can sleep"); } public String getColor(){ return color; } public void setColor(String col){ color = col; } } class Dog extends Animal { public void displayInfo(String c){ System.out.println("I am a " + type); System.out.println("My color is " + c); } public void bark() { System.out.println("I can bark"); } } class Main { public static void main(String[] args) { Dog dog1 = new Dog(); dog1.eat(); dog1.sleep(); dog1.bark(); dog1.type = "mammal"; dog1.setColor("black"); dog1.displayInfo(dog1.getColor()); } } ``` **輸出**: ```java I can eat I can sleep I can bark I am a mammal My color is black ``` 在此,`Animal`類內部的`type`字段受到保護。 我們已經使用`Main`類訪問了此字段, ```java dog1.type = "mammal"; ``` 可能是因為`Animal`和`Main`類都在同一包(同一文件)中。 * * * ## Java 方法覆蓋 從上面的示例中,我們知道子類的對象也可以訪問其超類的方法。 **如果在超類和子類中定義了相同的方法,會發生什么?** 好吧,在這種情況下,子類中的方法將覆蓋超類中的方法。 例如, ### 示例 3:方法覆蓋示例 ```java class Animal { protected String type = "animal"; public void eat() { System.out.println("I can eat"); } public void sleep() { System.out.println("I can sleep"); } } class Dog extends Animal { @Override public void eat() { System.out.println("I eat dog food"); } public void bark() { System.out.println("I can bark"); } } class Main { public static void main(String[] args) { Dog dog1 = new Dog(); dog1.eat(); dog1.sleep(); dog1.bark(); } } ``` **輸出**: ```java I eat dog food I can sleep I can bark ``` 在此,`eat()`存在于超類`Animal`和子類`Dog`中。 我們創建了子類`Dog`的對象`dog1`。 當我們使用`dog1`對象調用`eat()`時,將調用`Dog`內部的方法,而不會調用相同的超類方法。 這稱為方法覆蓋。 在上面的程序中,我們使用了`@Override`注解來告訴編譯器我們正在覆蓋方法。 但是,這不是強制性的。 在下一個教程中,我們將詳細了解[方法覆蓋](/java-programming/method-overriding "Java Method Overriding")。 如果需要從其子類中調用`Animal`的`eat()`方法,則可以使用`super`關鍵字。 ### 示例 4:`super`關鍵字 ```java class Animal { public Animal() { System.out.println("I am an Animal"); } public void eat() { System.out.println("I can eat"); } } class Dog extends Animal { public Dog(){ super(); System.out.println("I am a dog"); } @Override public void eat() { super.eat(); System.out.println("I eat dog food"); } public void bark() { System.out.println("I can bark"); } } class Main { public static void main(String[] args) { Dog dog1 = new Dog(); dog1.eat(); dog1.bark(); } } ``` **輸出**: ```java I am an Animal I am a dog I can eat I eat dog food I can bark ``` 在這里,我們使用`super`關鍵字使用`super()`調用構造器。 此外,我們使用`super.eat()`調用了`Animal`超類的`eat()`方法。 請注意,在調用構造器和方法時,`super`的用法有所不同。 要了解更多信息,請訪問 [Java `super`關鍵字](/java-programming/super-keyword "Java super Keyword") **。** * * * ## 繼承類型 繼承有五種類型。 * **單一繼承** - 類`B`僅從類`A`擴展。 * **多級繼承** - 類`B`從類`A`擴展而來; 然后`C`類從`B`類擴展。 * **層次繼承** - 類`A`充當類`B`,`C`和`D`的超類。 * **多重繼承** - 類`C`從接口`A`和`B`擴展。 * **混合繼承** - 兩種或更多種繼承的混合。 Java 不支持通過類的多重繼承和混合繼承。 但是,我們可以通過接口在 Java 中實現多重繼承。 我們將在后面的章節中了解接口。 * * * ## 為什么要使用繼承? * 最重要的用途是代碼的可重用性。 父類中存在的代碼無需在子類中再次編寫。 * 通過方法覆蓋實現運行時多態。 在后面的章節中,我們將學習有關多態的更多信息。
                  <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>

                              哎呀哎呀视频在线观看