<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://howtodoinjava.com/oops/multiple-inheritance-in-java/](https://howtodoinjava.com/oops/multiple-inheritance-in-java/) 正如我們早已了解到的那樣,Java 中不直接支持**多重繼承**,而直到 Java 7 才支持。 [Java 8](https://howtodoinjava.com/java-8-tutorial/) 可以通過不帶有[**菱形問題**](https://howtodoinjava.com/oops/java-inheritance/)的[默認方法](https://howtodoinjava.com/java8/default-methods-in-java-8/)實現**多繼承**的概念。 讓我們看看如何? ```java Table of Contents 1\. What are default methods? 2\. How multiple inheritance is achieved via default methods? 3\. Possible conflicts and their resolutions ``` ## 1\. 什么是默認方法? 如果您有足夠長的時間從事 Java 編程,您可能會意識到在現有接口中添加新方法可能會很痛苦。 您將需要在實現該接口的 java 類中實現該新方法。 這真的很難。 好吧,Java 8 帶來了**默認方法**,可以在完全相同的情況下為您提供幫助。 > 默認方法使您可以向接口添加新功能,并確保向后兼容實現該接口的現有類。 顧名思義,接口中的默認方法是默認情況下將調用的方法 - 如果在實現類時未覆蓋。 讓我們看一個例子。 `Moveable`接口是一些現有接口,并且想要添加新方法`moveFast()`。 如果它使用舊技術添加了`moveFast()`方法,則實現`Moveable`的所有類也將被更改。 因此,我們將`moveFast()`方法添加為默認方法。 ```java public interface Moveable { default void moveFast() { System.out.println("I am moving fast, buddy !!"); } } ``` 如果所有實現`Moveable`接口的類都不需要自己更改(直到某些類專門想要覆蓋`moveFast()`方法以添加自定義邏輯)。 所有類都可以直接調用`instance.moveFast()`方法。 ```java public class Animal implements Moveable { public static void main(String[] args) { Animal tiger = new Animal(); //Call default method using instance reference tiger.moveFast(); } } ``` ## 2\. 如何通過默認方法實現多重繼承? 多重繼承是某些面向對象的計算機編程語言的特性,其中對象或類可以從多個父對象或父類繼承特征和行為。 我們知道在 Java 中(直到 jdk 7),[`extends`](https://howtodoinjava.com/oops/extends-vs-implements/)關鍵字支持 Java 中的繼承,該關鍵字用于從父類創建子類。 您不能從兩個類擴展。 在 Java 7 之前,接口僅用于聲明必須實現哪些實現類的協定(除了[`abstract`](https://howtodoinjava.com/java/basics/abstract-keyword/)本身之外的實現類)。 因此,類可以繼承的接口沒有附加特定的行為。 因此,即使在一個類能夠實現所需數量的接口之后,將其稱為多重繼承也是不合適的。 但是由于 Java 8 是默認方法,所以接口也具有行為。 因此,現在**如果一個類實現了兩個接口并且都定義了默認方法,那么它實質上是從兩個父級繼承行為,即多重繼承**。 例如,在下面的代碼`Animal`中,類未定義其自身的行為; 而是從父接口繼承行為。 那是多重繼承。 ```java package com.howtodoinjava.examples; interface Moveable { default void moveFast(){ System.out.println("I am moving fast, buddy !!"); } } interface Crawlable { default void crawl(){ System.out.println("I am crawling !!"); } } public class Animal implements Moveable, Crawlable { public static void main(String[] args) { Animal self = new Animal(); self.moveFast(); self.crawl(); } } ``` ## 3\. 多重繼承期間可能發生的沖突 在上面的示例中,我們有兩個不同的接口和兩個不同的方法 – 因此沒有沖突。 如果**兩個接口都決定定義一個具有相同名稱**的新方法,該怎么辦? 好了,他們可以毫無問題地進行定義。 但是,當`Animal`實例調用其名稱時,將調用哪種方法。 那是矛盾的情況。 ```java package com.howtodoinjava.examples; interface Moveable { default void run(){ System.out.println("I am running, kid !!"); } } interface Crawlable { default void run(){ System.out.println("I am running, daddy !!"); } } public class Animal implements Moveable, Crawlable { public static void main(String[] args) { Animal self = new Animal(); //What will happen when below statement will execute //self.run(); } } ``` 因此,要解決上述沖突,調用者類必須確定要調用的`run()`方法,然后使用如下所示的接口引用來調用。 ```java Moveable.super.run(); //Call Moveable's run() method //or Crawlable.super.run(); //Call Crawlable's run() method ``` 這就是使用默認方法獲得的 Java 8 多重繼承特性的全部知識。 學習愉快!
                  <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>

                              哎呀哎呀视频在线观看