从Java中的多个类继承(可能不使用接口)

时间:2012-08-28 15:33:07

标签: java interface multiple-inheritance

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

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

6 个答案:

答案 0 :(得分:2)

没有。多重继承的Java方法是使用接口。

答案 1 :(得分:2)

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

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

现在,您的D类继承自ABC,但我怀疑这是您正在寻找的内容。

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间接延伸BC

答案 4 :(得分:1)

无法进行多重继承。

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

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

答案 5 :(得分:0)

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

一个类是对象的定义,其中一个接口是一个对象必须遵循的契约。