<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                >[success] # java -- 接口 1. 如果一個**抽象類**沒有字段,**所有方法**全部都是**抽象方法**,此時就可以使用接口聲明,因此可以說,接口就是一種比抽象類還抽象的類,體現在所有方法都為抽象方法 2. 定義接口的關鍵字是**interface** >[danger] ##### 接口特點 1. 里面變量只能是常量 2. 接口只能繼承接口 3. 接口可以多繼承 4. 不能有構造方法 5. 從**Java8**開始增加新特性,接口中允許出現**非抽象方法**和**靜態方法**,但**非抽象方法**需要使用**default**關鍵字修飾,原因之前定義的抽象方法如果實現接口的類非抽象類需要將所有的抽象方法都重寫,但并不是每一個抽象方法在繼承的類都有用到因此**default** 修飾的方法可以不用被重寫 6. 從**Java9**開始增加新特性,接口中允許**出現私有方法** >[danger] ##### 定義接口 ~~~ public interface ITest { public static final int num= 1; // 變量只能是常量 int num1 =2 ; // 縮寫因為只能是常量因此定義常量 public static final 可以省略 public abstract int getNum(); // 定義抽象方法 int getNum1(); // 縮寫 public default void show1(){} // java8 開始允許定義為default方法在繼承時候不用重寫 public static void show2(){} // java8 開始允許定義靜態方法,接口不能被實現,靜態方法調用不用被實現符合接口 private void show(){} // 從Java9開始允許接口中出現私有方法 // --------出現java 私有方法方法------------ // 當多個默認方法有共同的邏輯時候,想做提取例如,提取一個 show3方法實際這樣 // show3 方法還會被其他方法重寫但show3 僅僅是共同邏輯此時就可以使用java9特性 私有方法 public default void show3(){ // ....重復邏輯 } public default void show4(){ show3(); show(); // 更好 } public default void show5(){ show3(); show(); // 更好 } } ~~~ * 定義接口 ~~~ public interface ITest1 { } ~~~ * 接口多繼承,只需要重寫抽象方法 ~~~ public class Test implements ITest,ITest1{ @Override public int getNum() { return 0; } @Override public int getNum1() { return 0; } } ~~~ * 使用 ~~~ public class UseTest extends Test{ public static void main(String[] args) { // 使用多態向上轉型 Test test= new UseTest(); // 使用多態向上轉型 ITest test1 = new UseTest(); } } ~~~ * 如果抽象類實現接口可以不用將抽象方法都實現 ~~~ public abstract class ATest implements ITest{ } ~~~ * 接口只能繼承接口 ~~~ public interface ITest1 extends ITest{ } ~~~ >[success] # 類和接口之間的關系 | 名稱 | 關鍵字 | 關系 | | --- | --- |--- | | 類和類之間的關系 | 使用extends關鍵字表達繼承關系 | 支持單繼承 | |類和接口之間的關系 |使用implements關鍵字表達實現關系 |支持多實現| |接口和接口之間的關系| 使用extends關鍵字表達繼承關系 | 支持多繼承 | >[success] # 抽象類和接口的主要區別 1. 定義抽象類的關鍵字是abstract class,而定義接口的關鍵字是interface 2. 繼承抽象類的關鍵字是extends,而實現接口的關鍵字是implements 3. 繼承抽象類支持單繼承,而實現接口支持多實現 4. 抽象類中可以有構造方法,而接口中不可以有構造方法 5. 抽象類中可以有成員變量,而接口中只可以有常量 6. 抽象類中可以有成員方法,而接口中只可以有抽象方法 7. 抽象類中增加方法時子類可以不用重寫,而接口中增加方法時實現類需要重寫(Java8以前的版本) 8. 從Java8開始增加新特性,接口中允許出現非抽象方法和靜態方法,但非抽象方法需要使用default關鍵字修飾 9. 從Java9開始增加新特性,接口中允許出現私有方法
                  <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>

                              哎呀哎呀视频在线观看