使用构造函数链接时,不可能发生继承,那么接口中是如何进行继承的,并且可以进行多重继承?
答案 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 }