2

因此,假设我们有 A、B 和 C 类,我想从所有这些类继承并有另一个名为 D 的类,这可以使用 Java 中的实现和接口来完成。但是假设我们不想使用这个简单的解决方案,你能在 Java 中以任何其他方式从类 A、B 和 C 继承类 D 吗?

(这个问题可能与设计模式有关,在午餐讨论设计模式时挑战我的同事后提出)我认为除了使用多个接口之外,在 Java 中没有其他方法可以实现多重继承。

4

6 回答 6

3

多重继承是不可能的。

无论如何,您可以尝试使用composition来模拟这种继承。

JB Nizet在提供的链接中回答了您的问题。

于 2012-08-28T15:36:27.920 回答
3

从 Java SE 8 开始,接口的实现可能有限。这给出了实现的多重继承形式。

作为多重继承的替代方案,内部类可以执行类似的工作。

class Derived extends BaseOne {
    ... fields ...
    private class InnerTwo extends BaseTwo {
        ... code with access to Derived's fields ...
    }
}

If methods overridden from BaseOne need to call methods of BaseTwo they will need an explicit reference to the inner class, but not the other way around and the Derived fields are shared.

于 2012-08-28T16:00:24.250 回答
2

不,Java 的多重继承方法是使用接口。

于 2012-08-28T15:34:38.460 回答
2

Java 中的一个类只能从一个类继承(如果您不指定基类,则它是java.lang.Object)。从三个类继承的唯一方法是它们在链中相互继承:

class A {}
class B extends A {}
class C extends B {}
class D extends C {}

现在你的D类继承自A,BC,但我怀疑这就是你要找的。

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
}
于 2012-08-28T15:34:51.827 回答
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间接扩展。ABC

于 2012-08-28T15:36:07.410 回答
0

快速回答是否定的。多个接口不是多重继承。接口和类是不同的概念。

类是对象的定义,而接口是对象必须遵循的契约。

于 2012-08-28T15:35:16.337 回答