如果Java只能扩展一个类,并且每个类都扩展java.lang.Object
,那么它如何扩展另一个类?为什么每节课都没有写extends Object
?
8 回答
如果java只能扩展一个类,而每个类都扩展java.lang.Object,那它怎么能扩展另一个类呢?
当您说 A extends B 时,这意味着 A extends B 和 B extends Object
。一个类可以从另一个类继承,另一个类可以从另一个继承,并且在链的顶部是java.lang.Object
. Java 不支持多重继承,但支持多级继承。
为什么每个班级都没有写“扩展对象”?
所有类都Object
隐式扩展,因此将是冗余编码。
由于 java.lang.Object 是 Java 中每个对象的父对象,因此您不必显式编写extends Object
你总是可以扩展任何类。如果您需要具有 2 个类的行为 - 您需要为此使用接口
Java 中的每个类都隐式扩展了class Object
,您只能再扩展一个类和无限数量的接口。
如果您没有编写构造函数,则与每个类都有一个默认构造函数相同。
所以当你说
class A{
}
它实际上是这样的:
class A extends Object{
A(){
super();
}
}
但是当你说当你说
class B extends A
在这种情况下,B 类将具有 A 类的特性,并且由于 A 扩展了 Object,B 类也将继承 Object 类。
A -> 对象
B -> A
So
B -> 对象
您被允许扩展的唯一一个也Object
最终扩展了该类。因此您没有扩展两次。
Java不支持多重继承,只能直线继承(可以这么说)。不过,您使用的是 IMO 更强大的接口。我从不需要多重继承,但我大量使用接口。基本上不是创建第二个类,而是定义一个接口,然后让某个类实现它。这可以是不同的类别或相同的类别。
所有类都已经派生自对象,您不需要专门编写。
以下每一项都可以将对象扩展到左侧:
对象 -> 车辆 -> 汽车 -> Coupe -> Camaro
因此,例如,Coupe
正在扩展Car
,而不是(直接)扩展Object
......只是如果你继续往上走,你最终会到达Object
.
但是,您不能Coupe
同时扩展Car
和Truck
这是一个显示 Java 的 java.lang.Number 类的类层次结构的示例。
http://docs.oracle.com/javase/tutorial/java/data/numberclasses.html
可以看到,Integer 类继承自 Number,Number 继承自 Object。因此,您可以通过链接它们来继承多个类。
在面向对象编程 (OOP) 中,继承描述了对象的两种类型或类之间的关系,其中一种被称为另一种的子类型或子类型。
A -> B -> C -> D
子继承父的特性,允许共享功能。例如,可以创建一个具有诸如吃等特征的变量类 Animal;然后定义一个继承这些特征的子类型 Dog ,而无需显式地对它们进行编程,同时添加新的特征,比如追猫。
多重继承允许程序员同时使用多个层次结构,例如允许 Dog 从 Robot character 和 Animal 继承,并从所有这些类中访问特性。
A
/ \
C D
\ /
E
Java 使用第一个模型,因此从对象和另一个类继承不会引起问题,因为它本质上是分层的。
Object -> Animal -> Dog -> Pit Bull
每个对象都不需要扩展 Object 的原因是因为它是隐式发生的。