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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Java 接口 > 原文: [https://www.programiz.com/java-programming/interfaces](https://www.programiz.com/java-programming/interfaces) #### 在本教程中,我們將學習 Java 接口。 我們將借助示例學習如何實現接口以及何時使用它們。 在 Java 中,接口定義了其他類必須實現的一組規范。 例如, ```java interface Polygon { public void getArea(); } ``` 在此,`Polygon`是一個接口。 我們已經使用`interface`關鍵字來聲明一個接口。 `getArea()`方法是在`Polygon`接口中定義的規范。 使用此接口的所有類都必須實現`getArea()`方法。 接口可以包含抽象方法和常量。 例如, ```java interface Polygon { public static final String color = "blue"; public void getArea(); } ``` 在上面的示例中,我們創建了一個接口`Polygon`。 它包括一個常量變量`color`和一個抽象方法`getArea()`。 重要的是要注意,接口內的所有方法都是隱式`public`,而所有字段都是隱式`public static final`。 因此,沒有必要在接口內部指定訪問說明符。 例如,我們可以將上面的代碼編寫為 ```java interface Polygon { String color = "blue"; void getArea(); } ``` * * * ## 接口中的`implements`關鍵字 像抽象類一樣,我們無法創建接口的對象。 但是,我們可以在其他類中實現接口。 在 Java 中,我們使用`implements`關鍵字實現接口。 例如, ```java interface Polygon { void getArea(int length, int breadth); } class Rectangle implements Polygon { public void getArea(int length, int breadth) { System.out.println("The area of the rectangle is " + (length * breadth)); } } class Main { public static void main(String[] args) { Rectangle r1 = new Rectangle(); r1.getArea(5, 6); } } ``` **輸出** ```java The area of the rectangle is 30 ``` 在上面的程序中,我們創建了一個接口`Polygon`。`Polygon`接口具有抽象方法`getArea()`。 這意味著任何實現`Polygon`的類都必須提供`getArea()`方法的實現。 請注意,`Rectangle`類(實現了`Polygon`接口)具有實現的方法`getArea()`。 * * * ## 為什么要使用接口? 現在我們知道了接口是什么,讓我們了解為什么在 Java 中使用接口。 * 接口提供了類(實現它)必須遵循的規范。 在上面的示例中,我們已將`getArea()`用作接口`Polygon`內的規范。 這就像設置一個規則,即我們應該能夠獲取每個多邊形的面積。 因此,任何實現`Polygon`接口的類都必須提供`getArea()`方法的實現。 * 與抽象類相似,接口可幫助我們實現 Java 抽象。 在這里,我們知道`getArea()`計算多邊形的面積,但是對于不同的多邊形,計算面積的方式是不同的。 因此,`getArea()`的實現彼此獨立。 * 接口還用于在 Java 中實現多重繼承。 如果子類是從兩個或多個類繼承的,則它是多重繼承。 在 Java 中,無法通過擴展類來實現多重繼承。 但是,一個類可以實現多個接口。 這使我們能夠使用 Java 獲得多重繼承的功能。 例如, ```java interface Line { ... } interface Polygon { ... } class Rectangle implements Line, Polygon{ ... } ``` 在此,`Rectangle`必須提供`Line`和`Polygon`的所有方法的實現。 * * * ## 接口中的私有方法和靜態方法 隨著 Java 8 的發布,接口現在可以包含靜態方法。 與類相似,我們可以使用其引用訪問接口的靜態方法。 例如, ```java Polygon.staticMethod(); ``` 此外,接口在 Java 9 發行版中支持私有方法。現在,您可以在接口中使用**私有方法**和**私有靜態方法**。 由于無法實例化接口,因此將私有方法用作輔助方法,以為接口中的其他方法提供支持。 * * * ## 接口中的默認方法 隨著 Java 8 的發布,在接口內部引入了帶有實現的方法(默認方法)。 在此之前,所有方法都是 Java 中的抽象方法。 要在接口內部聲明默認方法,我們使用`default`關鍵字。 例如, ```java public default void getSides() { // body of getSides() } ``` ### 為什么使用默認方法? 讓我們以一個場景來理解為什么 Java 中引入了默認方法。 假設我們需要在接口中添加一個新方法。 我們可以輕松地在接口中添加方法,而無需執行。 但是,這還不是故事的結局。 我們實現該接口的所有類都必須提供該方法的實現。 如果大量類正在實現此接口,則我們需要跟蹤所有這些類并對其進行更改。 這不僅繁瑣,而且容易出錯。 為了解決這個問題,Java 引入了默認方法。 默認方法像普通方法一樣繼承。 讓我們以一個例子來更好地了解默認方法。 ### 示例 2:默認方法 ```java interface Polygon { void getArea(); default void getSides() { System.out.println("I can get sides of polygon."); } } class Rectangle implements Polygon { public void getArea() { int length = 6; int breadth = 5; int area = length * breadth; System.out.println("The area of the rectangle is "+area); } public void getSides() { System.out.println("I have 4 sides."); } } class Square implements Polygon { public void getArea() { int length = 5; int area = length * length; System.out.println("The area of the square is "+area); } } class Main { public static void main(String[] args) { Rectangle r1 = new Rectangle(); r1.getArea(); r1.getSides(); Square s1 = new Square(); s1.getArea(); } } ``` **輸出**: ```java The area of the rectangle is 30 I have 4 sides The area of the square is 25 ``` 在上面的示例中,我們創建了一個接口`Polygon`。`Polygon`具有默認方法`getSides()`和抽象方法`getArea()`。 然后,類`Rectangle`實現`Polygon`。`Rectangle`提供了抽象方法`getArea()`的實現,并覆蓋了默認方法`getSides()`。 我們創建了另一個`Square`類,它也實現了`Polygon`。 在此,`Square`僅提供抽象方法`getArea()`的實現。 * * * ### 接口的實際示例 讓我們來看一個更實用的 Java 接口示例。 ```java // To use the sqrt function import java.lang.Math; interface Polygon { void getArea(); // calculate the perimeter of a Polygon default void getPerimeter(int... sides) { int perimeter = 0; for (int side: sides) { perimeter += side; } System.out.println("Perimeter: " + perimeter); } } class Triangle implements Polygon { private int a, b, c; private double s, area; // initializing sides of a triangle Triangle(int a, int b, int c) { this.a = a; this.b = b; this.c = c; s = 0; } // calculate the area of a triangle public void getArea() { s = (double) (a + b + c)/2; area = Math.sqrt(s*(s-a)*(s-b)*(s-c)); System.out.println("Area: " + area); } } class Main { public static void main(String[] args) { Triangle t1 = new Triangle(2, 3, 4); // calls the method of the Triangle class t1.getArea(); // calls the method of Polygon t1.getPerimeter(2, 3, 4); } } ``` **輸出**: ```java Area: 2.9047375096555625 Perimeter: 9 ``` 在上面的程序中,我們創建了一個接口`Polygon`。 它包括默認方法`getParameter()`和抽象方法`getArea()`。 我們可以用相同的方式計算所有多邊形的周長,因此我們在`Polygon`中實現了`getPerimeter()`的主體。 現在,所有實現`Polygon`的多邊形都可以使用`getPerimeter()`計算周長。 但是,面積的計算對于不同的多邊形是不同的,因為計算面積的規則對于不同的多邊形是不同的。 因此,在沒有實現的情況下,將`getArea()`包括在`Polygon`中。 并且,任何實現`Polygon`接口的類都必須提供`getArea()`的實現。 * * * ## 接口中的`extends`關鍵字 與類相似,接口可以擴展其他接口。`extends`關鍵字用于擴展接口。 例如, ```java interface Line { //members of Line interface } interface Polygon extends Line { //members of Polygon interface and Line interface } ``` 在上面的示例中,接口`Polygon`擴展了`Line`接口。 現在,如果一個類實現了`Polygon`,則它應該為`Line`和`Polygon`的所有抽象類提供實現。 注意,一個接口可以擴展多個接口,類似于實現多個接口的類。 例如, ```java interface A { ... } interface B { ... } Interface C extends A, B { ... } ```
                  <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>

                              哎呀哎呀视频在线观看