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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java 抽象類和抽象方法 > 原文: [https://www.programiz.com/java-programming/abstract-classes-methods](https://www.programiz.com/java-programming/abstract-classes-methods) #### 在本教程中,我們將學習 Java 中的抽象。 我們將學習 Java 抽象類和方法,以及如何在程序中使用它們。 ## Java 抽象類 抽象類是無法實例化的類(我們無法創建抽象類的對象)。 在 Java 中,我們使用`abstract`關鍵字來聲明一個抽象類。 ```java abstract class Animal { //attributes and methods } ``` 如果嘗試創建抽象類的對象,則會出現編譯錯誤。 例如, ```java Animal a1 = new Animal() ``` 它將產生一個編譯錯誤: ```java Animal is abstract; cannot be instantiated ``` 盡管不能實例化抽象類,但是我們可以從中創建子類。 我們可以創建子類的對象來訪問抽象類的成員。 在詳細了解它之前,我們需要了解抽象方法。 * * * ## Java 抽象方法 我們使用相同的關鍵字`abstract`創建抽象方法。 聲明了一個抽象方法而沒有實現。 例如, ```java abstract void makeSound(); ``` 在這里,`makeSound()`是一種抽象方法。`makeSound()`的主體被`;`取代。 重要的是要注意,只有抽象類才能包含抽象方法。 如果我們在不是抽象的類中包含抽象方法,則會出現錯誤。 抽象類可以包含抽象方法和非抽象方法。 這是一個例子。 ```java abstract class Animal { public void displayInfo() { System.out.println("I am an animal."); } abstract void makeSound(); } ``` 在上面的示例中,我們創建了一個抽象類`Animal`。 它包含抽象方法`makeSound()`和非抽象方法`displayInfo()`。 * * * ## 抽象類的繼承 抽象類無法實例化。 要訪問抽象類的成員,我們必須繼承它。 例如 ### 示例 1:抽象類的繼承 ```java abstract class Animal { public void displayInfo() { System.out.println("I am an animal."); } } class Dog extends Animal { } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } } ``` **輸出**: ```java I am an animal. ``` 在上面的示例中,我們創建了一個抽象類`Animal`。 我們無法創建`Animal`的對象。 要訪問`Animal`的`displayInfo()`,我們繼承了`Animal`的子類`Dog`。 然后,我們使用`Dog`的`d1`對象訪問方法`displayInfo()`。 * * * ## 覆蓋抽象方法 在 Java 中,必須在子類中覆蓋超類的抽象方法。 這是因為子類繼承了超類的抽象方法。 由于我們的子類包含抽象方法,因此我們需要覆蓋它們。 **注意**:如果子類也被聲明為抽象,則不必強制覆蓋抽象方法。 ### 示例 2:覆蓋抽象方法 ```java abstract class Animal { abstract void makeSound(); public void eat() { System.out.println("I can eat."); } } class Dog extends Animal { public void makeSound() { System.out.println("Bark bark"); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.makeSound(); d1.eat(); } } ``` **輸出**: ```java Bark bark. I can eat. ``` 在上面的示例中,我們創建了一個抽象類`Animal`。 該類包含一個抽象方法`makeSound()`和一個非抽象方法`eat()`。 我們從超類`Animal`繼承了子類`Dog`。 在此,子類`Dog`覆蓋了抽象方法`displayInfo()`。 然后,我們創建了`Dog`的對象`d1`。 然后使用該對象調用`d1.displayInfo()`和`d1.eat()`方法。 * * * ## 訪問抽象類的構造器 與非抽象類相似,我們使用`super`關鍵字從子類訪問抽象類的構造器。 例如, ```java abstract class Animal { Animal() { …. } } class Dog extends Animal { Dog() { super(); ... } } ``` 在這里,我們已經使用`Dog`的構造器中的`super()`來訪問`Animal`的構造器。 注意,`super`應該始終是子類構造器的第一條語句。 訪問 [Java `super`關鍵字](https://www.programiz.com/java-programming/super-keyword)了解更多信息。 * * * ## 為什么選擇 Java 抽象? 抽象是面向對象編程的重要概念。 抽象僅顯示所需的信息,所有不必要的細節都保持隱藏。 這使我們可以通過使用更簡單,更高級的想法省略或隱藏細節來管理復雜性。 抽象的實際示例可以是摩托車制動器。 我們知道剎車的作用。 當我們踩剎車時,摩托車將停止。 但是,制動器的工作對我們而言是隱藏的。 隱藏制動器工作原理的主要優點是,現在制造商可以為不同的摩托車實現不同的制動器,但是制動器的作用是相同的。 讓我們舉一個例子來幫助我們更好地理解 Java 抽象。 ### 示例 3:Java 抽象 ```java abstract class Animal { abstract void makeSound(); } class Dog extends Animal { public void makeSound() { System.out.println("Bark bark."); } } class Cat extends Animal { public void makeSound() { System.out.println("Meows "); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.makeSound(); Cat c1 = new Cat(); c1.makeSound(); } } ``` **輸出**: ```java Bark bark Meows ``` 在上面的示例中,我們創建了超類`Animal`。 超類`Animal`具有抽象方法`makeSound()`。 無法在`Animal`內部實現`makeSound()`方法。 這是因為每種動物都會發出不同的聲音。 因此,`Animal`的所有子類都將具有`makeSound()`的不同實現。 我們無法以對`Animal`的所有子類都正確的方式在`Animal`中實現`makeSound()`。 因此,`Animal`中`makeSound()`的實現保持隱藏狀態。 在以上示例中,`Dog`自行實現了`makeSound()`,而`Cat`自行實現了`makeSound()`。 * * * ## 要記住的要點 * 我們使用`abstract`關鍵字來創建抽象類和方法。 * 抽象方法沒有任何實現(方法體)。 * 包含抽象方法的類也應該是抽象的。 * 我們不能創建抽象類的對象。 * 為了實現抽象類的函數,我們從其繼承子類并創建該子類的對象。 * 子類必須覆蓋抽象類的所有抽象方法。 但是,如果子類被聲明為抽象的,則不必強制覆蓋抽象方法。 * 我們可以使用抽象類的引用來訪問抽象類的靜態屬性和方法。 例如 ```java Animal.staticMethod(); ``` * * * ## 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>

                              哎呀哎呀视频在线观看