激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本在线不卡一区二区 | 国产成人综合在线观看 | 精品视频在线免费看 | 黄色电影免费网址 | 福利在线国产 | 免费黄色在线电影 | 国产一区精品在线观看 | 毛片午夜| 欧美日韩亚洲一区二区三区 | 欧美日韩亚洲不卡 | www.guochanav.com | 久久久成人精品视频 | 在线播放免费人成毛片乱码 | 精品久久久久久久久久久久久 | 成人免费国产视频 | 色黄视频免费观看 | 九九热九九爱 | av人人 | 91精品国产九九九久久久亚洲 | 久久草草影视免费网 | 黄色网址在线免费播放 | 久久九九热re6这里有精品 | 美女扒开腿让男生桶爽网站 | 7777欧美| 亚洲无毛av | 免费视频www在线观看 | 亚洲骚图 | 国产亚洲小视频 | 一级做a爱性色毛片免费1 | 国产一区二区在线观看视频 | 一边吃奶一边插下面 | 一级黄色影院 | 日本一区二区视频在线观看 | 成人午夜高清 | 久久久久一区二区三区四区五区 | 国产精品午夜未成人免费观看 | 一级毛片免费观看 | www.精品久久| 日本欧美一区二区三区视频麻豆 | 97zyz成人免费视频 | 一级黄色免费观看视频 |