如何在没有构造函数的接口中支持多继承?

时间:2017-05-21 17:04:06

标签: java inheritance multiple-inheritance

使用构造函数链接时,不可能发生继承,那么接口中是如何进行继承的,并且可以进行多重继承?

2 个答案:

答案 0 :(得分:1)

在类和接口之间没有继承,但实现关系。由于实现多个接口的类实际上并没有继承它们,所以我没有看到任何问题。实现者类不必调用构造函数,因为接口只是一种契约:实现者类必须提供接口方法。

答案 1 :(得分:0)

你从错误的前提开始:

  

没有构造函数链接就没有继承的可能性......

继承需要构造函数链接。

接口没有每个实例的状态,也没有构造函数(事实上它们没有每个实例状态对于没有构造函数是必不可少的)。但是,他们可以包括

  • 抽象方法(例如,没有实现),类继承并且必须实现,或者如果它是抽象类,则声明abstract

  • default具有实现类继承的实现的方法,除非该类定义了自己的实现

重新default方法,比如你有:

interface TheInterface {
    default void answer() {
        System.out.println("42");
    }
}
class TheClass implements TheInterface {
}

然后你有:

TheClass c = new TheClass();
c.answer(); // Outputs "42"

TheClass继承自TheInterface,从类型角度(TheClass"的实例是" TheInterface)和实施角度( TheClass继承了answer的{​​{1}}的实现。但是没有构造函数链,因为接口没有构造函数,因为它们没有每个实例的状态。

您可能会想到TheInterface调用了一个no-args构造函数,但我们可以从字节码中看到TheClass的构造函数链到{{} 1}},而不是TheClass

Object

class TheClass implements TheInterface {
  TheClass();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."":()V
       4: return
}