java的單繼承多實現問題
阿新 • • 發佈:2022-05-17
為什麼java類不支援多繼承(介面支援):
(1)子類繼承父類中有多個相同的成員變數,子類在使用的時候不知道呼叫父類的哪一個成員變數。
(2)子類繼承父類中有多個相同的方法,若子類未覆蓋父類方法,在子類呼叫時不知道呼叫父類的哪一個方法。
如果一個類實現了多個介面就沒有這樣的問題了嗎?
在java8之前的定義:
(1)介面定義的變數都是常量,編譯時就確定呼叫關係。
(2)方法呼叫時始終呼叫實現類的方法,不存在歧義。
不過,java8之後介面可以有預設方法,一個類實現多個介面有相同的預設方法咋辦嘞,只能要求子類做出選擇(重寫該方法)。
必須實現m2方法,不然會報錯。
interface C extendsA,B{ @Override default void m2() { }
public interface A {
public static final String constanct="a1";
void m1();
default void m2() {
System.out.println("a#m2");
}
public interface B {
public static final String constanct="a2";
void m1();
default void m2() {
System.out.println("B#m2");
}
參考部落格:https://blog.csdn.net/qq_31142553/article/details/106036690