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