淺談Java 繼承介面同名函式問題
阿新 • • 發佈:2020-09-24
在Java中如果一個類同時繼承介面A與B,並且這兩個介面中具有同名方法,會怎麼樣?
動手做實驗:
interface A{ void fun(); } interface B{ void fun(); } interface C extends A,B{ } public class Test implements C{ @Override public void fun() { System.out.println("hehe"); } public static void main(String[] args) { new Test().fun(); } }
執行截圖:
上例的情況,可以正常編譯執行,輸出"hehe",因為A與B中的fun具有相同的簽名(引數個數與型別相同)
interface A{ void fun(); } interface B{ int fun(int x); } interface C extends A,B{ } public class Test implements C{ @Override public void fun() { System.out.println("hehe1"); } @Override public int fun(int x) { return 0; } public static void main(String[] args) { new Test().fun(); } }
上例也是可以編譯執行的,因為A與B中的fun方法具有不同的函式簽名,本質上是兩個方法,分別實現即可。
interface A{ void fun(); } interface B{ int fun(); } interface C extends A,B{ } public class Test implements C{ @Override public void fun() { System.out.println("hehe"); } public static void main(String[] args) { new Test().fun(); } }
而這種具有相同函式簽名,但不同返回值的方法,是沒有辦法編譯的,介面C便已經無法編譯。
補充知識:java 類implements多個介面含有相同名字函式
java 類不能多繼承 class A extends B,C{}是不允許的
但能實現多個介面 class A implements B,C{}是可以的,而多個介面中如果出現相同名字函式:
interface in1{ public void fun1(); public void fun2(); } interface in2{ public void fun1(); public void fun3(); }
只許實現一個即可:
class fun implements in1,in2{ public void fun3() { // TODO Auto-generated method stub } public void fun1() { // TODO Auto-generated method stub } public void fun2() { // TODO Auto-generated method stub } }
以上這篇淺談Java 繼承介面同名函式問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。