Java中的多重继承与否?

gab*_*los 0 java inheritance class multiple-inheritance

据说,Java语言只支持单继承.但是如何同时从Object和任何其他类继承?这不是一个多重继承.

其次,我们需要继承所有11个Object方法?我很难想象为什么我在I/O中需要它们,例如

最后,JDK 8将为我们提供接口中的默认方法实现,以及是否可能导致Java中的多重继承.

如果接口A提供方法a()具有默认实现并且接口B也提供带有另一个默认实现的a()方法并且我们的自定义类C实现两个接口并依赖于默认实现 - 那不是Diamond of Death吗?

Roh*_*ain 8

但是如何同时从Object和任何其他类继承?这不是一个多重继承.

不,这不是发生的事情.并非所有类都直接从Object类扩展.但只有顶级继承层次结构中的类才能从Object类(隐式)扩展.层次结构中较低的其余类从Object类扩展到超类.而且,这就是我们所说的多级继承.

因此,请考虑以下层次结构: -

class A { }

class B extends A { }
Run Code Online (Sandbox Code Playgroud)

在上述情况下,class A相当于class A extends Object.

其次,我们需要继承所有11个Object方法?我很难想象为什么我在I/O中需要它们

当你说继承时,我怀疑你的意思是覆盖.您不需要覆盖任何类的方法.只是根据您的要求,是否覆盖任何方法.例如: - 您经常要覆盖方法,以便为您的实例编写自定义相等性测试.而在这种情况下,你也应该重写方法,以维持合同和.Objectequals()hashCode()equals()hashCode()

最后,JDK 8将为我们提供接口中的默认方法实现,以及是否可能导致Java中的多重继承.

如果接口A提供方法a()具有默认实现并且接口B也提供带有另一个默认实现的a()方法并且我们的自定义类C实现两个接口并依赖于默认实现 - 那不是Diamond of Death吗?

我不能评论这个概念,因为我还没有读过这个东西.可能,我会在稍后更新答案.

  • @ user2033357:这并不是说这11种方法有任何成本.它不占用任何额外的内存或任何东西. (3认同)
  • 根据Java规范,每个类都扩展了Object. (2认同)