Java基础

Java为什么只能单继承

2019-04-06  本文已影响0人  爱学习的江小石

这是我在去哪儿网面试的时候被问到的问题,因为之前在学习Java的时候一直在强调Java是不能多继承的,但并没有去了解为什么。

先屡清楚继承和实现的区别:

  1 类继承类,实现接口。接口继承接口。

   2 类只能单继承类(抽象类和非抽象类), 可以多实现接口。而接口可以多继承接口。

分析原因:

       Java中类不能多继承类是为了安全。因为无论是抽象类还是非抽象类都包含非抽象的方法(非抽象类也可能没有),当类可以多继承类时,被继承的不同的父类可能会有同名同参的方法,如果子类也没有重写这个同名同参的方法,则在子类的实例调用这个方法的时候就会出现冲突。

举个例子:

   class A继承了class B 和class C, 但是 class B和class C中有同名同参的方法method,且在A中并没有重写方法method,那在A的实例中调用method方法就会出现冲突,jvm就会不知道到底该调用哪一个方法。

class B { method(){}};

class C {method() {}};

class A extends B, C{};

 A a = new A(); 

a.method();

此时在执行a.method()时冲突就会出现。

所以Java只能单继承。

引申学习:

如果想进一步了解更深层次的原因,可以学习Java多态和Java 类的加载机制,加载过程中的类信息,方法表等知识。

参考:从JVM角度看Java多态

上一篇 下一篇

猜你喜欢

热点阅读