java状态、实现和类型的多重继承

类和接口之间的一个显着区别是类可以具有字段,而接口则不能。此外,您可以实例化一个类来创建一个对象,这是接口无法做到的。正如在什么是对象?一节中所解释的,对象将其状态存储在字段中,这些字段在类中定义。Java 编程语言不允许您扩展多个类的一个原因是避免状态的多重继承问题,即从多个类继承字段的能力。

例如,假设您能够定义一个扩展多个类的新类。当您通过实例化该类来创建对象时,该对象将从该类的所有超类继承字段。如果来自不同超类的方法或构造函数实例化同一个字段怎么办?哪个方法或构造函数将优先?因为接口不包含字段,所以您不必担心状态的多重继承导致的问题。

实现的多重继承是从多个类继承方法定义的能力。这种类型的多重继承会出现问题,例如名称冲突和歧义。当支持这种类型的多重继承的编程语言的编译器遇到包含同名方法的超类时,他们有时无法确定访问或调用哪个成员或方法。此外,程序员可能会通过向超类添加新方法而无意中引入名称冲突。默认方法引入了一种实现的多重继承形式。一个类可以实现多个接口,这些接口可以包含同名的默认方法。Java 编译器提供了一些规则来确定特定类使用的默认方法。

Java 编程语言支持类型的多重继承,这是一个类实现多个接口的能力。一个对象可以有多种类型:它自己的类的类型和该类实现的所有接口的类型。这意味着如果一个变量被声明为接口的类型,那么它的值可以引用从任何实现该接口的类实例化的任何对象。这在使用接口作为类型一节中进行了讨论。

与实现的多重继承一样,一个类可以继承在它扩展的接口中定义的方法的不同实现(asdefault或static)。在这种情况下,编译器或用户必须决定使用哪一个。

java状态、实现和类型的多重继承

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注