Java 在没有构造函数的接口中如何支持多重继承?
如果没有构造函数链接,就不可能发生继承,那么继承如何在接口中发生以及多重继承是可能的?类和接口之间没有继承,只有实现关系。由于实现多个接口的类实际上没有继承它们的任何内容,所以我看不出有任何问题。实现者类不必调用构造函数,因为接口只是一种契约:实现者类必须提供接口方法。您从一个错误的前提开始: 如果没有构造函数链接,就不可能继承 继承不需要构造函数链接 接口没有每实例状态,也没有构造函数(它们没有每实例状态这一事实对于它们没有构造函数是至关重要的)。然而,它们可以包括Java 在没有构造函数的接口中如何支持多重继承?,java,inheritance,multiple-inheritance,Java,Inheritance,Multiple Inheritance,如果没有构造函数链接,就不可能发生继承,那么继承如何在接口中发生以及多重继承是可能的?类和接口之间没有继承,只有实现关系。由于实现多个接口的类实际上没有继承它们的任何内容,所以我看不出有任何问题。实现者类不必调用构造函数,因为接口只是一种契约:实现者类必须提供接口方法。您从一个错误的前提开始: 如果没有构造函数链接,就不可能继承 继承不需要构造函数链接 接口没有每实例状态,也没有构造函数(它们没有每实例状态这一事实对于它们没有构造函数是至关重要的)。然而,它们可以包括 抽象方法(例如,没有实现
- 抽象方法(例如,没有实现),类继承并必须实现这些方法,或者,如果是抽象类,则声明
abstract
方法,其实现由实现类继承,除非该类定义自己的实现default
interface TheInterface {
default void answer() {
System.out.println("42");
}
}
class TheClass implements TheInterface {
}
TheClass c = new TheClass();
c.answer(); // Outputs "42"
那么你有:
interface TheInterface {
default void answer() {
System.out.println("42");
}
}
class TheClass implements TheInterface {
}
TheClass c = new TheClass();
c.answer(); // Outputs "42"
类
继承自接口
,从类型角度(类的实例是一个“接口
)和实现角度(类继承自接口
的应答
的实现)。但是没有构造函数链接,因为接口没有构造函数,因为它们没有每个实例的状态
您可能会认为有一个无参数构造函数可以调用类,但我们可以从字节码中看到,类的构造函数链接到对象,而不是接口:
javap-c类
:
class TheClass implements TheInterface {
TheClass();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."":()V
4: return
}
类该类实现接口{
类();
代码:
0:aload_0
1:invokespecial#1//方法java/lang/Object。“:()V
4:返回
}
类现在可以从接口继承东西,特别是默认方法。类从它们继承的接口继承除静态方法之外的所有东西,并且总是继承。因此,这个答案显然是错误的。来自JLS:“类C从其直接超类和直接超接口继承所有
抽象和默认(§9.4)方法m
,对于这些方法,以下所有内容都是正确的:…”(强调原始)类也从其超接口继承抽象方法。@LewBloch:你是什么意思,签名?我谈到了“…从类型的角度来看。”显然不是实现,因为根据定义,没有实现。当然,我可以澄清这一点。我只是简单地指出,JLS明确表示类从它们的超级接口继承抽象和默认方法。我的意思正是JLS的意思。