回答重点
主要是因为多继承会产生菱形继承(也叫钻石继承)问题,Java 之父就是吸取 C++ 他们的教训,因此不支持多继承。
所谓的菱形继承很好理解,我们来看下这个图:
是不是看起来很像一个菱形,BC 继承了 A,然后 D 继承了 BC, 假设此时要调用 D 内定义在 A 的方法,因为 B 和 C 都有不同的实现,此时就会出现歧义,不知道应该调用哪个了。
扩展知识
这里很可能会被面试官追问:既然多继承不行,那为什么接口多实现可以?
为什么接口可以多实现?
在 Java8 之前接口是无法定义具体方法实现的,所以即使有多个接口必须子类自己实现,所以并不会发生歧义。
Java8 之后出了默认方法(default method),此时不就又出现的多继承的菱形继承问题了?
所以 Java 强制规定,如果多个接口内有相同的默认方法,子类必须重写这个方法。
不然,编译期就会报错:
...