<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國際加速解決方案。 廣告
                ### [多繼承](https://lingcoder.gitee.io/onjava8/#/book/10-Interfaces?id=%e5%a4%9a%e7%bb%a7%e6%89%bf) 多繼承意味著一個類可能從多個父類型中繼承特征和特性。 Java 在設計之初,C++ 的多繼承機制飽受詬病。Java 過去是一種嚴格要求單繼承的語言:只能繼承自一個類(或抽象類),但可以實現任意多個接口。在 Java 8 之前,接口沒有包袱——它只是方法外貌的描述。 多年后的現在,Java 通過默認方法具有了某種多繼承的特性。結合帶有默認方法的接口意味著結合了多個基類中的行為。因為接口中仍然不允許存在屬性(只有靜態屬性,不適用),所以屬性仍然只會來自單個基類或抽象類,也就是說,不會存在狀態的多繼承。正如下面這樣: ~~~ // interfaces/MultipleInheritance.java import java.util.*; interface One { default void first() { System.out.println("first"); } } interface Two { default void second() { System.out.println("second"); } } interface Three { default void third() { System.out.println("third"); } } class MI implements One, Two, Three {} public class MultipleInheritance { public static void main(String[] args) { MI mi = new MI(); mi.first(); mi.second(); mi.third(); } } ~~~ 輸出: ~~~ first second third ~~~ 現在我們做些在 Java 8 之前不可能完成的事:結合多個源的實現。只要基類方法中的方法名和參數列表不同,就能工作得很好,否則會得到編譯器錯誤: ~~~ // interface/MICollision.java import java.util.*; interface Bob1 { default void bob() { System.out.println("Bob1::bob"); } } interface Bob2 { default void bob() { System.out.println("Bob2::bob"); } } // class Bob implements Bob1, Bob2 {} /* Produces: error: class Bob inherits unrelated defaults for bob() from types Bob1 and Bob2 class Bob implements Bob1, Bob2 {} ^ 1 error */ interface Sam1 { default void sam() { System.out.println("Sam1::sam"); } } interface Sam2 { default void sam(int i) { System.out.println(i * 2); } } // This works because the argument lists are distinct: class Sam implements Sam1, Sam2 {} interface Max1 { default void max() { System.out.println("Max1::max"); } } interface Max2 { default int max() { return 47; } } // class Max implements Max1, Max2 {} /* Produces: error: types Max2 and Max1 are imcompatible; both define max(), but with unrelated return types class Max implements Max1, Max2 {} ^ 1 error */ ~~~ **Sam**類中的兩個`sam()`方法有相同的方法名但是簽名不同——方法簽名包括方法名和參數類型,編譯器也是用它來區分方法。但是從**Max**類可看出,返回類型不是方法簽名的一部分,因此不能用來區分方法。為了解決這個問題,需要覆寫沖突的方法: ~~~ // interfaces/Jim.java import java.util.*; interface Jim1 { default void jim() { System.out.println("Jim1::jim"); } } interface Jim2 { default void jim() { System.out.println("Jim2::jim"); } } public class Jim implements Jim1, Jim2 { @Override public void jim() { Jim2.super.jim(); } public static void main(String[] args) { new Jim().jim(); } } ~~~ 輸出: ~~~ Jim2::jim ~~~ 當然,你可以重定義`jim()`方法,但是也能像上例中那樣使用**super**關鍵字選擇基類實現中的一種。
                  <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>

                              哎呀哎呀视频在线观看