所以,假设我们有类A,B和C,并且我希望从所有这些类继承并拥有另一个名为D的类,它可以使用Java中的实现和接口来完成。但是,假设我们不想使用这个简单的解决方案,您是否能够在Java中以任何其他方式从类A,B和C继承D类?
(这个问题可能与设计模式有关,它是在我的同事在午餐时讨论设计模式后提出来的。)我认为除了使用多个接口之外,还有其他方法可以在Java中进行多重继承。
答案 0 :(得分:2)
没有。多重继承的Java方法是使用接口。
答案 1 :(得分:2)
Java中的类只能从一个类继承(如果没有指定基类,则为java.lang.Object
)。从三个类继承的唯一方法是它们是否在一个链中相互继承:
class A {}
class B extends A {}
class C extends B {}
class D extends C {}
现在,您的D
类继承自A
,B
和C
,但我怀疑这是您正在寻找的内容。
Java中的惯用解决方案是实现多个接口而不是继承多个类。如果必须“继承”实现,请使用组合而不是继承。
interface IA {}
interface IB {}
interface IC {}
class A implements IA {}
class B implements IB {}
class C implements IC {}
class D implements IA, IB, IC {
A a = ...;
B b = ...;
C c = ...;
// Implementations of methods from IA, IB, and IC
// need to forward the calls to a, b, and c
}
答案 2 :(得分:2)
从Java SE 8开始,接口的实现可能有限。这提供了一种多重实现继承的形式。
作为多重继承的替代方法,内部类可以执行类似的工作。
class Derived extends BaseOne {
... fields ...
private class InnerTwo extends BaseTwo {
... code with access to Derived's fields ...
}
}
如果从BaseOne
覆盖的方法需要调用BaseTwo
的方法,则需要显式引用内部类,而不是相反,并且Derived
字段是共享的。
答案 3 :(得分:1)
Java不支持class D extends A, B, C
意义上的多重继承。正如Lanaru所提到的,执行此操作的首选方法是使用接口。
否则,您可以这样做:
public class A {}
public class B extends A {}
public class C extends B {}
public class D extends C {}
实际上,D
会通过A
间接延伸B
,C
。
答案 4 :(得分:1)
答案 5 :(得分:0)
快速回答是否定的。多个接口不是多重继承。接口和类是不同的概念。
一个类是对象的定义,其中一个接口是一个对象必须遵循的契约。