Java语言中的继承
我们说java遵循单一继承模型,即java类最多只能扩展一个类,然后说每个java类都是从对象类继承的Java语言中的继承,java,inheritance,Java,Inheritance,我们说java遵循单一继承模型,即java类最多只能扩展一个类,然后说每个java类都是从对象类继承的 假设有两个类A和B。A和B都从Object扩展而来。现在假设A扩展了B。这是否意味着A具有多重继承性(A同时从B和类对象继承)?您可以拥有一个继承链,这不是多重继承。 一次不能有一个从多个类继承的类 语言禁止: class A extends B, C {} 你可以有一个继承链,这不是多重继承。 一次不能有一个从多个类继承的类 语言禁止: class A extends B, C {} J
假设有两个类A和B。A和B都从Object扩展而来。现在假设A扩展了B。这是否意味着A具有多重继承性(A同时从B和类对象继承)?您可以拥有一个继承链,这不是多重继承。 一次不能有一个从多个类继承的类 语言禁止:
class A extends B, C
{}
你可以有一个继承链,这不是多重继承。 一次不能有一个从多个类继承的类 语言禁止:
class A extends B, C
{}
Java类只能直接从一个类继承。在这种情况下,A
不会直接从对象继承,而只从A
继承
您是仅仅从术语的角度提问,还是有一些行为您感兴趣?一个Java类只能直接从一个类继承。在这种情况下,A
不会直接从对象继承,而只从A
继承
您是仅仅从术语的角度提问,还是有一些行为是您感兴趣的?对象A扩展了对象B,对象B扩展了对象。它不是多重继承,而是层次结构,对象A扩展了对象B,对象B扩展了对象。它不是多重继承,而是层次结构(Java不支持)
类扩展对象
类B扩展对象
C类扩展了A、B类
Object
/\
/ \
/ \
A B (Not supported by Java)
\ /
\ /
\ /
C
多级/可传递继承:(由Java支持)
类B扩展对象
A类扩展到B类
Object
|
|
|
B (Supported by Java)
|
|
|
A
多重继承:(Java不支持)
类扩展对象
类B扩展对象
C类扩展了A、B类
Object
/\
/ \
/ \
A B (Not supported by Java)
\ /
\ /
\ /
C
多级/可传递继承:(由Java支持)
类B扩展对象
A类扩展到B类
Object
|
|
|
B (Supported by Java)
|
|
|
A
在Java中,每个类只能从一个父类直接扩展。所以,要么B从对象扩展,要么A从B扩展,xorA和B都从对象扩展
您假设两者同时为真——这在Java中是不可能的
如果B从对象扩展,A从B扩展,则是,A确实从对象继承,但每个类仍然有一个父类:
class Object
|
+-- class B
|
+-- class A
换句话说,Java不支持多重继承。在Java中,每个类只能从一个父类直接扩展。所以,要么B从对象扩展,要么A从B扩展,xorA和B都从对象扩展
您假设两者同时为真——这在Java中是不可能的
如果B从对象扩展,A从B扩展,则是,A确实从对象继承,但每个类仍然有一个父类:
class Object
|
+-- class B
|
+-- class A
换句话说,Java不支持多重继承。Java不允许扩展超过1个超类。但是,一个类可以实现多个接口。您可以创建一个接口和抽象类的结构,让您可以扩展多个类。祝你好运 Java不允许扩展超过1个超类。但是,一个类可以实现多个接口。您可以创建一个接口和抽象类的结构,让您可以扩展多个类。祝你好运 多重继承的主要问题是模糊性,当两个类定义同一个方法时,同时被重写和删除。Java不受此影响,因为它只允许重写单个类。这显然是指直接重写,而不是处理继承的层次结构。这种类型的继承(A覆盖B、B覆盖等)不受任何问题的影响。多重继承的主要问题是不明确,当两个类定义相同的方法,并且都被覆盖,并且。Java不受此影响,因为它只允许重写单个类。这显然是指直接重写,而不是处理继承的层次结构。这种继承(A覆盖B、B覆盖等)不受任何问题的影响。看看可传递继承(C直接从B继承和可传递从A继承)之间的区别:
和多重继承(C继承自A和B):
除了具有相同签名的方法被覆盖外,所有内容都被添加。即使添加了使用相同名称声明的变量,它们也只是被称为“隐藏”,但仍然可以使用casting或super关键字(如果是直接父级)进行访问。看看可传递继承(C直接从B继承,而可传递从A继承)之间的区别:
Excepting Object, which has no superclass, every class has one and |
only one direct superclass (single inheritance). In the absence of any
other explicit superclass, every class is implicitly a subclass of Object.
和多重继承(C继承自A和B):
除了具有相同签名的方法被覆盖外,所有内容都被添加。即使添加了使用相同名称声明的变量,它们也只是被称为“隐藏”,但仍然可以使用casting或super关键字(如果是直接父级)进行访问
Excepting Object, which has no superclass, every class has one and |
only one direct superclass (single inheritance). In the absence of any
other explicit superclass, every class is implicitly a subclass of Object.
在您的问题中,A直接继承B
,对象类
由B继承,而不是由A继承。这称为传递继承
在你的问题中,A直接继承B
,而对象类
由B继承,而不是由A继承。这称为传递继承简言之,不,在单继承中,对象
是A
的超类(父类),它是B
的超类。多重固有