一、概述
最近写的东西大多都是面试中遇到的(最近在面试),面试官问了一个Java为什么只能单继承的问题? 这个正式考察你对java的底层原理的理解。
二、Java为什么只能单继承
Java中类不能多继承类是为了安全。因为无论是抽象类还是非抽象类都包含非抽象的方法(非抽象类也可能没有),当类可以多继承类时,被继承的不同的父类可能会有同名同参的方法,如果子类也没有重写这个同名同参的方法,则在子类的实例调用这个方法的时候就会出现冲突。
例如:
class A{ eat(){}};
class B{ eat() {}};
class C extends A , B{};
C c = new C(); c.eat();
此时在执行c.eat()时,到底调用的是哪个父类方法,每办法确定,这个冲突就出现了。
三、实现多接口、接口多继承接口
当然了,java为了解决单继承问题,提供了实现多接口的功能进行扩展;以及接口可以多继承接口。
例如:
public interface InterfaceA {
public abstract void methodA();
public abstract void methodCommon();
public default void methodDefault() {
System.out.println("A");
}
}
public interface InterfaceB {
public abstract void methodA();
public abstract void methodCommon();
public default void methodDefault() {
System.out.println("A");
}
}
// 多继承接口
public interface InterfaceC extends InterfaceA, InterfaceB {
public abstract void method();
//多个父接口当中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写
@Override
public default void methodDefault() {
}
}
两个父接口A、B的中有抽象方法重复,没有关系。但是默认方法重复,则需要在子接口中重写。



