为什么String类继承自Object类

6

查看String类声明,您会发现它继承了Object类。

public final class String
extends Object
implements Serializable, Comparable<String>, CharSequence

明确地编写 extends Object 在实际上并不需要的情况下有什么意义?

这背后是否存在任何逻辑原因?


14
这是关于Java的古老历史,去考古遗址询问吧 :) - Marko Topolnik
2个回答

24

在官方的Oracle JDK源代码中没有这个东西。你查看的是哪个版本?

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence

不管你在源代码中是否写了extends Object,都不会有任何区别。但要注意,如果你必须扩展另一个合法的类而不是Object,那么你将陷入死胡同,因为Java不支持多重继承。

更新

OP正在查看API文档中String的声明。在Java中,每个类都必须并且确实扩展Object。但是,源代码是否有extends Object是不同的事情。

String类在源代码中没有extends Object。但是,API声明始终指示每个类都隐式地扩展Object。

看一下源代码


好的,那不是源代码。Java中的每个类都隐式地扩展Object。通常没有人会显式地声明它为“extends Object”。 - adarshr
啊..我完全忽略了我在看文档而不是实际源代码。 - Adil Shaikh
2
只需使用Character作为示例重新表述您的问题即可。然而,在OpenJDK 7中,他们已经删除了extends Object的指定。 - Marko Topolnik

3
我的猜测是您没有安装JDK源文件,但正在查看反编译的类文件。
在我的源代码文件夹中,缺少“extends Object”。反编译器会自动添加“extends ”,但由于在Java中每个类都定义为派生自Object,所以在String类的情况下会变成“extends Object”。

那怎么回答问题呢? - Lokesh
@loki 公平地说,这可能是正确的解释。String 的实际源代码没有声明“extends Object”。 - Marko Topolnik
@MarkoTopolnik:同意。多读几遍问题,确切理解它。 - Lokesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接