Java面試知識點(三)Java中的單繼承和多繼承


多繼承的優缺點

優點:對象可以調用多個父類中的方法

缺點:如果派生類所繼承的多個父類有相同的父類(也就是一個菱形繼承結構),而派生類對象需要調用這個祖先類的方法,就會容易出現二義性。

菱形繼承結構


1、java 與 C++ 的不同點在於多繼承。

Java:不能多繼承,只能單繼承,但可以實現多個接口

C++:可以實現多繼承。

例如: class A extends B implements C,D,E {}


2、如若寫成 interface A extends B,C,D 可以編譯通過,這樣是不是違背了 JAVA 的單繼承特性呢?

(1)接口可以繼承多個接口是因為接口里面的定義的方法都是未實現的,不會增加復雜性。

(2)接口不是類,而是對類的一組需求的描述。接口絕不能含有實例域,也不能在接口中實現方法。接口可以實現多繼承不會增加代碼的復雜性。

(3)多繼承是發生在執行期間的,而不是在編譯期間,所以可以編譯通過,並且不違背 Java 是單繼承的。


3、為什么接口可以繼承多個接口?

因為接口定義的都是抽象的方法,而且不能在接口中實現方法。所以,接口繼承多個接口,並不會使接口的結構變得很復雜。相反,這樣做,還能給一個團隊在開發的過程中,提供很多便利。

單繼承指的是 class,而不是 interface. interface 是可以多繼承的。

接口可以多繼承可以被多實現,因為接口中的方法都是抽象的,這些方法都被實現的類所實現,即使多個父接口中有同名的方法,在調用這些方法時調用的是子類的中被實現的方法,不存在歧義;同時,接口的中只有靜態的常量,但是由於靜態變量是在編譯期決定調用關系的,即使存在一定的沖突也會在編譯時提示出錯;而引用靜態變量一般直接使用類名或接口名,從而避免產生歧義,因此也不存在多繼承的第一個缺點。 對於一個接口繼承多個父接口的情況也一樣不存在這些缺點。所以接口可以多繼承。


4、為什么 JAVA 改成只能單繼承?

因為在 C++ 中一個類是可以繼承自多個類,但這樣的機制會使類的結構變的很復雜,所以 JAVA 將 C++ 這一機制通過接口得以改善。
JAVA 中不允許類多重繼承,只能單一繼承,但有些情況單一繼承並不能表達出現實世界中的某些邏輯關系,所以就提出了通過接口來實現多重繼承。


5、多繼承中 父類方法重復

public interface interfaceA {
    public void fun1();
    public void fun2();
    public void fun3();
}

public interface interfaceB {
    public void fun1();
    public void fun2(String str);
    public String fun3();
}

public interface interfaceC  extends interfaceA,interfaceB {

}

public class Test implements interfaceC {
    @Override
    public void fun1(){
    }

    @Override
    public void fun2(){
    }

    @Override
    public void fun2(String str){
    }

    @Override
    public void fun3(){// 報錯
    }
    
}

總結:
多繼承的fun1 和fun2 分別是同一個函數和重載的兩個函數(參數不同) ,但是fun3只是返回值不同,不符合java重載的規范,編譯器無法區分,所以不論寫void fun3 還是String fun3 還是兩個都寫,都是錯誤的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM