3

如果Java只能扩展一个类,并且每个类都扩展java.lang.Object,那么它如何扩展另一个类?为什么每节课都没有写extends Object

4

8 回答 8

8

如果java只能扩展一个类,而每个类都扩展java.lang.Object,那它怎么能扩展另一个类呢?

当您说 A extends B 时,这意味着 A extends B 和 B extends Object。一个类可以从另一个类继承,另一个类可以从另一个继承,并且在链的顶部是java.lang.Object. Java 不支持多重继承,但支持多级继承。

为什么每个班级都没有写“扩展对象”?

所有类都Object隐式扩展,因此将是冗余编码。

于 2013-06-21T18:05:58.957 回答
2

由于 java.lang.Object 是 Java 中每个对象的父对象,因此您不必显式编写extends Object

你总是可以扩展任何类。如果您需要具有 2 个类的行为 - 您需要为此使用接口

于 2013-06-21T18:10:04.820 回答
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 -> 对象

于 2013-06-21T18:16:52.513 回答
1

您被允许扩展的唯一一个也Object最终扩展了该类。因此您没有扩展两次。

于 2013-06-21T18:06:29.560 回答
0

Java不支持多重继承,只能直线继承(可以这么说)。不过,您使用的是 IMO 更强大的接口。我从不需要多重继承,但我大量使用接口。基本上不是创建第二个类,而是定义一个接口,然后让某个类实现它。这可以是不同的类别或相同的类别。

所有类都已经派生自对象,您不需要专门编写。

于 2013-06-21T18:06:53.557 回答
0

以下每一项都可以将对象扩展到左侧:
对象 -> 车辆 -> 汽车 -> Coupe -> Camaro

因此,例如,Coupe正在扩展Car,而不是(直接)扩展Object......只是如果你继续往上走,你最终会到达Object.

但是,您不能Coupe同时扩展CarTruck

于 2013-06-21T18:07:09.123 回答
0

这是一个显示 Java 的 java.lang.Number 类的类层次结构的示例。

http://docs.oracle.com/javase/tutorial/java/data/numberclasses.html

可以看到,Integer 类继承自 Number,Number 继承自 Object。因此,您可以通过链接它们来继承多个类。

于 2013-06-21T18:08:01.740 回答
0

在面向对象编程 (OOP) 中,继承描述了对象的两种类型或类之间的关系,其中一种被称为另一种的子类型或子类型。

A -> B -> C -> D

子继承父的特性,允许共享功能。例如,可以创建一个具有诸如吃等特征的变量类 Animal;然后定义一个继承这些特征的子类型 Dog ,而无需显式地对它们进行编程,同时添加新的特征,比如追猫。

多重继承允许程序员同时使用多个层次结构,例如允许 Dog 从 Robot character 和 Animal 继承,并从所有这些类中访问特性。

        A
       / \
      C   D
       \ /
        E 

Java 使用第一个模型,因此从对象和另一个类继承不会引起问题,因为它本质上是分层的。

Object -> Animal -> Dog -> Pit Bull

每个对象都不需要扩展 Object 的原因是因为它是隐式发生的。

于 2013-06-21T18:10:09.897 回答