一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|

服務器之家 - 編程語言 - JAVA教程 - java 一個類實現兩個接口的案例

java 一個類實現兩個接口的案例

2020-10-07 22:30ymzdb7 JAVA教程

這篇文章主要介紹了java 一個類實現兩個接口的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

直接用英文逗號分隔就可以了,比如:

java" id="highlighter_543846">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
inerface IHello {
  String sayHello(String name);
 
}
interface IHi {
  String sayHi(String name);
 
}
 
class ServiceImpl implements IHello, IHi {// 實現三個四個。。。n個接口都是使用逗號分隔
public String sayHello(String name) {
  return "Hello, " + name;
 
}
public String sayHi(String name) {
  return "Hi, " + name;
 
}
}

補充知識:Java 一個實現的多個接口,有相同簽名的default方法會怎么辦?

看代碼吧~

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public interface A {
  default void hello() {
    System.out.println("Hello from A");
  }
}
public interface B extends A {
  default void hello() {
    System.out.println("Hello from B");
  }
}
public class C implements B, A {
  public static void main(String... args) {
    new C().hello();
  }
}

這段代碼,會打印什么呢?

有三條規則

類永遠贏。類聲明的方法,或者超類聲明的方法,比default方法的優先級高

否則,子接口贏

否則,如果集成自多個接口,必須明確選擇某接口的方法

上面代碼的UML圖如下

java 一個類實現兩個接口的案例

所以,上面的代碼,輸出是

Hello from B

如果這樣呢?

?
1
2
3
4
5
6
7
8
public class D implements A{
  
}
public class C extends D implements B, A {
  public static void main(String... args) {
    new C().hello();
  }
}

UML圖是這樣的

java 一個類實現兩個接口的案例

規則1說,類聲明的方法優先級高,但是,D沒有覆蓋hello方法,它只是實現了接口A。所以,它的default方法來自接口A。規則2說,如果類和超類沒有方法,就是子接口贏。所以,程序打印的還是“Hello from B”。

所以,如果這樣修改代碼

?
1
2
3
4
5
6
7
8
9
10
public class D implements A{
  void hello(){
    System.out.println("Hello from D");
  }
}
public class C extends D implements B, A {
  public static void main(String... args) {
    new C().hello();
  }
}

程序的輸出就是“Hello from D”。

如果D這樣寫

?
1
2
3
public abstract class D implements A {
  public abstract void hello();
}

C就只能實現自己的抽象方法hello了。

如果是這樣的代碼呢

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public interface A {
  default void hello() {
    System.out.println("Hello from A");
  }
}
public interface B {
  default void hello() {
    System.out.println("Hello from B");
  }
}
public class C implements B, A {
  
}

UML圖如下

java 一個類實現兩個接口的案例

會生成這樣的編譯器錯誤

"Error: class C inherits unrelated defaults for hello() from types B and A."

怎么修改代碼呢?只能明確覆蓋某接口的方法

?
1
2
3
4
5
public class C implements B, A {
  void hello(){
    B.super.hello();
  }
}

如果代碼是這樣的,又會怎樣呢?

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public interface A{
  default void hello(){
    System.out.println("Hello from A");
  }
}
public interface B extends A {
  
}
public interface C extends A {
  
}
public class D implements B, C {
  public static void main(String... args) {
    new D().hello();
  }
}

UML圖是這樣的

java 一個類實現兩個接口的案例

很明顯,還是不能編譯。

以上這篇java 一個類實現兩個接口的案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/ymzdb7/article/details/88696379

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 韩日视频在线 | 亚洲国产精品综合久久一线 | 精品国产欧美精品v | 日本精品vide·ssex日本 | 久久精品午夜一区二区福利 | 亚洲第一在线 | 午夜一区二区三区 | 国产三级自拍视频 | 日韩一区二区三区四区五区 | 天堂中文在线免费观看 | 亚洲国产99999在线精品一区 | 国产欧美日韩在线观看精品 | 男生操女生漫画 | 国内精品在线播放 | a亚洲天堂| 白丝校花被扒开双腿喷水小说 | 免费看视频高清在线观看 | 青青在线观看 | 亚洲区一 | 午夜精品国产 | 亚洲男人天堂久久 | 日韩欧美a | 国产高清在线播放刘婷91 | 白虎喷水 | 精品高潮呻吟99AV无码视频 | 能看的毛片网站 | nxgx欧美| 午夜国产视频 | 欧美在线观看一区二区三 | 小夫妻天天恶战 | 亚飞与亚基国语1080p在线观看 | 免费看国产精品久久久久 | 国产精品夜色视频一级区 | 国产精品区牛牛影院 | 99国产国人青青视频在线观看 | 3d美女触手怪爆羞羞漫画 | 日韩免费视频播放 | 亚洲琪琪 | 国产大片线上免费观看 | 九九精品视频在线观看九九 | 亚洲 欧美 日本 国产 高清 |