<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/05/abstract-class-vs-interface-in-java/](https://beginnersbook.com/2013/05/abstract-class-vs-interface-in-java/) 在本文中,我們將通過示例討論 Java 中抽象類和接口之間的**差異。我已經在 [OOPs 概念](https://beginnersbook.com/2013/04/oops-concepts/) 的單獨教程中介紹了抽象類和接口,因此我建議您先閱讀它們,然后再考慮差異。 1. [java 中的抽象類](https://beginnersbook.com/2013/05/java-abstract-class-method/) 2. Java 中的[接口](https://beginnersbook.com/2013/05/java-interface/)** | | **抽象類** | **接口** | | --- | --- | --- | | 1 | 抽象類一次只能擴展一個類或一個抽象類 | 接口一次可以擴展任意數量的接口 | | 2 | 抽象類可以擴展另一個具體(常規)類或抽象類 | 接口只能擴展另一個接口 | | 3 | 抽象類可以同時具有抽象和具體方法 | 接口只能有抽象方法 | | 4 | 在抽象類關鍵字中,`abstract`是將方法聲明為抽象的必需項 | 在接口關鍵字中,`abstract`是可選的,用于將方法聲明為抽象 | | 五 | 抽象類可以具有受保護和公共抽象方法 | 接口只能有公共抽象方法 | | 6 | 抽象類可以使用任何[訪問描述符](https://beginnersbook.com/2013/05/java-access-modifiers/)具有靜態,最終或靜態最終變量 | 接口只能有`public static final`(常量)變量 | 以下示例解釋了上述每個要點: ## Java 中的抽象類 vs 接口 ### 差異 No.1:抽象類一次只能擴展一個類或一個抽象類 ```java class Example1{ public void display1(){ System.out.println("display1 method"); } } abstract class Example2{ public void display2(){ System.out.println("display2 method"); } } abstract class Example3 extends Example1{ abstract void display3(); } class Example4 extends Example3{ public void display3(){ System.out.println("display3 method"); } } class Demo{ public static void main(String args[]){ Example4 obj=new Example4(); obj.display3(); } } ``` 輸出: ```java display3 method ``` **接口可以一次擴展任意數量的接口** ```java //first interface interface Example1{ public void display1(); } //second interface interface Example2 { public void display2(); } //This interface is extending both the above interfaces interface Example3 extends Example1,Example2{ } class Example4 implements Example3{ public void display1(){ System.out.println("display2 method"); } public void display2(){ System.out.println("display3 method"); } } class Demo{ public static void main(String args[]){ Example4 obj=new Example4(); obj.display1(); } } ``` 輸出: ```java display2 method ``` ### 差異 2:抽象類可以由類或抽象類擴展(繼承) ```java class Example1{ public void display1(){ System.out.println("display1 method"); } } abstract class Example2{ public void display2(){ System.out.println("display2 method"); } } abstract class Example3 extends Example2{ abstract void display3(); } class Example4 extends Example3{ public void display2(){ System.out.println("Example4-display2 method"); } public void display3(){ System.out.println("display3 method"); } } class Demo{ public static void main(String args[]){ Example4 obj=new Example4(); obj.display2(); } } ``` 輸出: ```java Example4-display2 method ``` **接口只能通過接口擴展。類必須實現它們而不是擴展** ```java interface Example1{ public void display1(); } interface Example2 extends Example1{ } class Example3 implements Example2{ public void display1(){ System.out.println("display1 method"); } } class Demo{ public static void main(String args[]){ Example3 obj=new Example3(); obj.display1(); } } ``` 輸出: ```java display1 method ``` ### 差異 3:抽象類可以同時具有抽象和具體方法 ```java abstract class Example1 { abstract void display1(); public void display2(){ System.out.println("display2 method"); } } class Example2 extends Example1{ public void display1(){ System.out.println("display1 method"); } } class Demo{ public static void main(String args[]){ Example2 obj=new Example2(); obj.display1(); } } ``` **接口只能有抽象方法,它們不能有具體方法** ```java interface Example1{ public abstract void display1(); } class Example2 implements Example1{ public void display1(){ System.out.println("display1 method"); } } class Demo{ public static void main(String args[]){ Example2 obj=new Example2(); obj.display1(); } } ``` 輸出: ```java display1 method ``` ### 差異 No.4:在抽象類中,關鍵字`abstract`是將方法聲明為抽象的必需項 ```java abstract class Example1{ public abstract void display1(); } class Example2 extends Example1{ public void display1(){ System.out.println("display1 method"); } public void display2(){ System.out.println("display2 method"); } } class Demo{ public static void main(String args[]){ Example2 obj=new Example2(); obj.display1(); } } ``` **在接口中,關鍵字`abstract`是可選的,用于將方法聲明為抽象,因為默認情況下所有方法都是抽象的** ```java interface Example1{ public void display1(); } class Example2 implements Example1{ public void display1(){ System.out.println("display1 method"); } public void display2(){ System.out.println("display2 method"); } } class Demo{ public static void main(String args[]){ Example2 obj=new Example2(); obj.display1(); } } ``` ### 差異 No.5:抽象類可以有保護和公共抽象方法 ```java abstract class Example1{ protected abstract void display1(); public abstract void display2(); public abstract void display3(); } class Example2 extends Example1{ public void display1(){ System.out.println("display1 method"); } public void display2(){ System.out.println("display2 method"); } public void display3(){ System.out.println("display3 method"); } } class Demo{ public static void main(String args[]){ Example2 obj=new Example2(); obj.display1(); } } ``` **接口只能有公共抽象方法** ```java interface Example1{ void display1(); } class Example2 implements Example1{ public void display1(){ System.out.println("display1 method"); } public void display2(){ System.out.println("display2 method"); } } class Demo{ public static void main(String args[]){ Example2 obj=new Example2(); obj.display1(); } } ``` ### 差異 No.6:抽象類可以具有任何訪問描述符的靜態,最終或靜態最終變量 ```java abstract class Example1{ private int numOne=10; protected final int numTwo=20; public static final int numThree=500; public void display1(){ System.out.println("Num1="+numOne); } } class Example2 extends Example1{ public void display2(){ System.out.println("Num2="+numTwo); System.out.println("Num2="+numThree); } } class Demo{ public static void main(String args[]){ Example2 obj=new Example2(); obj.display1(); obj.display2(); } } ``` **接口只能有公共靜態最終(常量)變量** ```java interface Example1{ int numOne=10; } class Example2 implements Example1{ public void display1(){ System.out.println("Num1="+numOne); } } class Demo{ public static void main(String args[]){ Example2 obj=new Example2(); obj.display1(); } } ```
                  <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>

                              哎呀哎呀视频在线观看