<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://beginnersbook.com/2013/05/java-abstract-class-method/](https://beginnersbook.com/2013/05/java-abstract-class-method/) 使用`abstract`關鍵字聲明的類稱為抽象類。它可以有抽象方法(沒有主體的方法)以及具體方法(常規方法與主體)。普通類(非抽象類)不能有抽象方法。在本指南中,我們將了解什么是抽象類,我們使用它的原因以及在 Java 中使用它時必須記住的規則。 > 抽象類不能**實例化**,這意味著你不能創建它的**對象**。為什么?我們將在本指南的后面部分討論。 ## 為什么我們需要一個抽象類? 假設我們有一個類`Animal`有一個方法`sound()`和它的子類(參見[繼承](https://beginnersbook.com/2013/03/inheritance-in-java/)),如`Dog`,`Lion`,`Horse`,`Cat`等。動物的聲音因動物而異,沒有必要在父類中實施這種方法。這是因為每個子類都必須覆蓋此方法以給出自己的實現細節,例如`Lion`類將在此方法中說`"Roar"`而`Dog`類將說`"Woof"`。 因此,當我們知道所有動物子類將會并且應該重寫此方法時,那么在父類中實現此方法是沒有意義的。因此,使這個方法抽象是一個很好的選擇,因為通過使這個方法抽象我們強制所有子類實現這個方法(否則你會得到編譯錯誤),我們也不需要在父類中給這個方法任何實現。 由于`Animal`類有一個抽象方法,你必須要聲明這個類是抽象的。 現在每個動物都必須有聲音,通過使這個方法抽象化,我們強制要求子類為這個方法提供實現細節。這樣我們就可以確保每只動物都有聲音。 ## 抽象類示例 ```java //abstract parent class abstract class Animal{ //abstract method public abstract void sound(); } //Dog class extends Animal class public class Dog extends Animal{ public void sound(){ System.out.println("Woof"); } public static void main(String args[]){ Animal obj = new Dog(); obj.sound(); } } ``` 輸出: ```java Woof ``` 因此,對于這種情況,我們通常將類聲明為抽象類,然后**具體類**擴展這些類并相應地重寫方法,并且也可以擁有自己的方法。 ## 抽象類聲明 抽象類概述了方法,但未必實現所有方法。 ```java //Declaration using abstract keyword abstract class A{ //This is abstract method abstract void myMethod(); //This is concrete method with body void anotherMethod(){ //Does something } } ``` ## 規則 **注 1:**正如我們在上面的例子中所看到的,有些情況下很難或經常不必在父類中實現所有方法。在這些情況下,我們可以將父類聲明為`abstract`,這使得它成為一個特殊的類,它本身并不完整。 從抽象類派生的類必須實現在父類中聲明為抽象的所有方法。 **注 2:**抽象類無法實例化,這意味著你無法創建它的對象。要使用此類,您需要創建另一個擴展此類的類并提供抽象方法的實現,然后您可以使用該子類的對象來調用父類的非抽象方法以及實現的方法(那些在父類中是抽象的,但在子類中實現)。 **注 3:**如果一個孩子沒有實現抽象父類的所有抽象方法,那么子類也必須被聲明為`abstract`。 > **你知道嗎?** 由于抽象類也允許具體方法,因此它不提供 100%抽象。你可以說它提供了部分抽象。抽象是一個過程,您只顯示“相關”數據并從用戶“隱藏”對象的不必要細節。 > > 另一方面,[接口](https://beginnersbook.com/2013/05/java-interface/)用于 100%抽象(這里有關[抽象](https://beginnersbook.com/2013/03/oops-in-java-encapsulation-inheritance-polymorphism-abstraction/)的更多信息)。 > 您可能還想閱讀: [Java 中抽象類和接口之間的區別](https://beginnersbook.com/2013/05/abstract-class-vs-interface-in-java/) ### 為什么我們不能創建抽象類的對象? 因為這些類是不完整的,所以它們具有沒有主體的抽象方法,所以如果 java 允許你創建這個類的對象,那么如果有人使用該對象調用抽象方法那么會發生什么?沒有實際的方法實現調用。 也因為一個對象是具體的。抽象類就像一個模板,所以你必須先擴展它并在它之前構建它。 ### 用于演示不允許創建抽象類的對象的示例 如上所述,我們無法實例化抽象類。該程序拋出編譯錯誤。 ```java abstract class AbstractDemo{ public void myMethod(){ System.out.println("Hello"); } abstract public void anotherMethod(); } public class Demo extends AbstractDemo{ public void anotherMethod() { System.out.print("Abstract method"); } public static void main(String args[]) { //error: You can't create object of it AbstractDemo obj = new AbstractDemo(); obj.anotherMethod(); } } ``` 輸出: ```java Unresolved compilation problem: Cannot instantiate the type AbstractDemo ``` 注意:擴展抽象類的類必須實現它的所有抽象方法,否則你也必須聲明該類抽象。 ## 抽象類 vs 具體類 非抽象的類稱為 **具體類**。在我們在本指南開頭看到的上述例子中,`Animal`是一個抽象類,`Cat`,`Dog`和`Lion`是具體的課程。 **要點:** 1. 除非被其他類擴展,否則抽象類沒有用處。 2. 如果在類中聲明**抽象方法**,那么您也必須聲明類抽象。你不能在具體的類中使用抽象方法。反之亦然并非總是如此:如果一個類沒有任何抽象方法,那么它也可以被標記為抽象。 3. 它也可以有非抽象方法(具體)。 我已經在單獨的教程中介紹了抽象方法的規則和示例,你可以在這里找到指南: [Java 中的抽象方法](https://beginnersbook.com/2014/01/abstract-method-with-examples-in-java/) 現在讓我們看一些基本知識和抽象方法的例子。 1)抽象方法沒有正文。 2)始終以**分號**(`;`)結束聲明。 3)必須[覆蓋](https://beginnersbook.com/2014/01/method-overriding-in-java-with-example/)。必須擴展抽象類,并且必須以相同的方式覆蓋抽象方法。 4)必須將類聲明為抽象的抽象方法。 **注意:**擴展抽象類的類必須覆蓋所有抽象方法。 ## 抽象類和方法的示例 ```java abstract class MyClass{ public void disp(){ System.out.println("Concrete method of parent class"); } abstract public void disp2(); } class Demo extends MyClass{ /* Must Override this method while extending * MyClas */ public void disp2() { System.out.println("overriding abstract method"); } public static void main(String args[]){ Demo obj = new Demo(); obj.disp2(); } } ``` 輸出: ```java overriding abstract 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>

                              哎呀哎呀视频在线观看