【java扫盲】Java中的单继承和多继承

多继承的优缺点

优点:对象可以调用多个父类中的方法

缺点:如果派生类所继承的多个父类有相同的父类(也就是一个菱形继承结构),而派生类对象需要调用这个祖先类的方法,就会容易出现二义性。

【java扫盲】Java中的单继承和多继承_第1张图片


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 还是两个都写,都是错误的

 

你可能感兴趣的:(java扫盲,java)