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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # java 中的接口 > 原文: [https://beginnersbook.com/2013/05/java-interface/](https://beginnersbook.com/2013/05/java-interface/) 在上一個教程中,我們討論了[抽象類](https://beginnersbook.com/2013/05/java-abstract-class-method/),它用于實現部分抽象。與抽象類不同,接口用于完全抽象。抽象是一個過程,您只顯示“相關”數據并“隱藏”用戶不必要的對象細節(參見:[抽象](https://beginnersbook.com/2013/03/oops-in-java-encapsulation-inheritance-polymorphism-abstraction/))。在本指南中,我們將介紹 **java** 中的接口,我們使用它的原因以及在 [Java 編程](https://beginnersbook.com/java-tutorial-for-beginners-with-examples/)中使用接口時必須遵循的規則。 ## Java 中的接口是什么? 接口看起來像一個類,但它不是一個類。接口可以像類一樣擁有方法和變量,但接口中聲明的方法默認是抽象的(只有方法簽名,沒有正文,請參閱: [Java 抽象方法](https://beginnersbook.com/2014/01/abstract-method-with-examples-in-java/))。此外,在接口中聲明的變量是`public static`最后默認。我們將在本指南后面詳細介紹。 ## Java 中的接口有什么用? 如上所述,它們用于完全抽象。由于接口中的方法沒有正文,因此必須先由類實現它們才能訪問它們。實現接口的類必須實現該接口的所有方法。此外,java 編程語言不允許擴展多個類,但是您可以在類中實現多個接口。 **語法:** 通過指定關鍵字`interface`聲明接口。例如: ```java interface MyInterface { /* All the methods are public abstract by default * As you see they have no body */ public void method1(); public void method2(); } ``` ## Java 中的接口示例 這是類實現接口的方式。它必須提供在接口中聲明的所有方法的主體,或者換句話說,您可以說該類必須實現接口的所有方法。 > **你知道嗎?** 類`implements`接口但是接口`extends`的另一個接口。 ```java interface MyInterface { /* compiler will treat them as: * public abstract void method1(); * public abstract void method2(); */ public void method1(); public void method2(); } class Demo implements MyInterface { /* This class must have to implement both the abstract methods * else you will get compilation error */ public void method1() { System.out.println("implementation of method1"); } public void method2() { System.out.println("implementation of method2"); } public static void main(String arg[]) { MyInterface obj = new Demo(); obj.method1(); } } ``` 輸出: ```java implementation of method1 ``` **您可能還想閱讀:** [抽象類和接口之間的區別](https://beginnersbook.com/2013/05/abstract-class-vs-interface-in-java/) ## 接口和繼承 如上所述,接口不能實現另一個接口。它必須擴展其他接口。請參閱下面的示例,其中我們有兩個接口`Inf1`和`Inf2`。`Inf2`擴展了`Inf1`所以如果類實現了`Inf2`,它必須提供`Inf2`和`Inf1`接口的所有方法的實現。 > 在此處了解有關繼承的更多信息: [Java 繼承](https://beginnersbook.com/2013/03/inheritance-in-java/) ```java interface Inf1{ public void method1(); } interface Inf2 extends Inf1 { public void method2(); } public class Demo implements Inf2{ /* Even though this class is only implementing the * interface Inf2, it has to implement all the methods * of Inf1 as well because the interface Inf2 extends Inf1 */ public void method1(){ System.out.println("method1"); } public void method2(){ System.out.println("method2"); } public static void main(String args[]){ Inf2 obj = new Demo(); obj.method2(); } } ``` 在這個程序中,類`Demo`只實現接口`Inf2`,但是它必須提供接口`Inf1`的所有方法的實現,因為接口`Inf2`擴展了`Inf1`。 ## Java 中的標記或標記接口 空接口稱為標記或標記接口。例如,`Serializable`,`EventListener`,`Remote`(`java.rmi.Remote`)是標記接口。這些接口中沒有任何字段和方法。[在這里閱讀更多相關信息](https://beginnersbook.com/2016/03/tag-or-marker-interfaces-in-java/)。 ### 嵌套接口 在另一個接口或類中聲明的接口稱為[嵌套](https://beginnersbook.com/2016/03/nested-or-inner-interfaces-in-java/)接口。它們也被稱為內部接口。例如,集合框架中的`Entry`接口在`Map`接口內聲明,這就是我們不直接使用它的原因,而是我們這樣使用它:`Map.Entry`。 **要點:**以下是關于接口的關鍵要點: 1)我們無法在 java 中實例化接口。這意味著我們無法創建接口的對象 2)接口提供完全抽象,因為它的方法都沒有。另一方面,抽象類提供了部分抽象,因為它可以具有抽象和具體(帶有正文的方法)方法。 3)類使用`implements`關鍵字來實現接口。 4)雖然在接口的任何方法的類中提供實現,但它需要被公開提及。 5)實現任何接口的類必須實現該接口的所有方法,否則應該將該類聲明為`abstract`。 6)接口不能聲明為私有,受保護或瞬態。 7)所有接口方法默認為`abstract`和`public`。 8)接口中聲明的變量默認為`public`,`static`和`final`。 ```java interface Try { int a=10; public int a=10; public static final int a=10; final int a=10; static int a=0; } ``` 以上所有陳述都是相同的。 9)接口變量必須在聲明時初始化,否則編譯器將拋出錯誤。 ```java interface Try { int x;//Compile-time error } ``` 上面的代碼將拋出編譯時錯誤,因為變量`x`的值在聲明時未初始化。 10)在任何實現類中,您都不能更改在`interface`中聲明的變量,因為默認情況下它們是`public`,`static`和`final`。這里我們實現了具有變量`x`的接口`Try`。當我們嘗試設置變量`x`的值時,我們得到了編譯錯誤,因為變量`x`默認是公共靜態`final`,并且最終變量無法重新初始化。 ```java class Sample implements Try { public static void main(String args[]) { x=20; //compile time error } } ``` 11)接口可以擴展任何接口但不能實現它。類實現接口和接口擴展接口。 12)**類**可以實現任何**數量的接口**。 13)如果兩個接口中存在**兩個或多個相同的方法**并且一個類實現兩個接口,則該方法的實現一次就足夠了。 ```java interface A { public void aaa(); } interface B { public void aaa(); } class Central implements A,B { public void aaa() { //Any Code here } public static void main(String args[]) { //Statements } } ``` 14)類不能實現兩個具有相同名稱但返回類型不同的方法的接口。 ```java interface A { public void aaa(); } interface B { public int aaa(); } class Central implements A,B { public void aaa() // error { } public int aaa() // error { } public static void main(String args[]) { } } ``` 15)變量名稱沖突可以通過接口名稱解決。 ```java interface A { int x=10; } interface B { int x=100; } class Hello implements A,B { public static void Main(String args[]) { /* reference to x is ambiguous both variables are x * so we are using interface name to resolve the * variable */ System.out.println(x); System.out.println(A.x); System.out.println(B.x); } } ``` ## java 中接口的優點: 使用接口的優點如下: 1. 在不打擾實現部分的情況下,我們可以實現實現的安全性 2. 在 java 中,不允許[**多重繼承**](https://beginnersbook.com/2013/05/java-multiple-inheritance/) ,但是您可以使用接口來使用它,因為您可以實現多個接口。
                  <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>

                              哎呀哎呀视频在线观看