2014-06-07 38 views
-3

为什么对象类是java中的超类昨天我有一次采访,面试官问我问题。为什么对象类是java中的超类

+2

你回答了什么? –

+4

因为Java是这样设计的? – Tiny

+0

我向他回答说:“一个对象类给每个类提供共同的行为,这就是为什么对象类是java中的超类,它为所有类提供了通用方法” –

回答

2

因为它只是一个定义。实际上,第4.3.2条jls8表示:

Object类是所有其他类的超类(§8.1.4)。

没有更正式的方式来定义Object类。

+0

它不仅仅是*“a”*单个定义即使它被概括为这样。这种行为是Java类型系统中难题的另一部分。 (例如,有*可能是一种语言,其中对象类型是每个其他类的直接超类,但这不是Java。) – user2864740

+0

@ user2864740我同意,但它认为OP要以正式的方式理解Object类。 –

+1

我是挑选使用“*只是*一个定义”。这是一个定义/规则的集合,这是一个真实的陈述,但不是整个故事。 – user2864740

3

因为Java中的所有对象都继承自Object类。

因此,如果您创建您的班级,例如MyObject,此对象的父级将为Object类。

这意味着Object是超类MyObject类。

+0

@ user2864740在您的评论中,您将展示另一个示例,我们不能使用'super'来获取Object类(在您的示例中),但我们始终可以通过将对象转换为Object类来获得Object类,因为所有的对象都从Object类继承而来。 –

+0

是的,我删除了我的评论,因为使用*继承*是正确的。 – user2864740

1

Java中的所有类都默认“扩展”Object类,这就是为什么Object是Java中每个类的超类。

根据类“Object”的definition

类对象是类层次结构的根。每个类都有Object作为超类。所有的对象,包括数组,都实现了这个类的方法。

这是之前讨论了类似的问题... Default class that is extended by all classes in java

+1

这是*不*暗示所有对象“扩展”对象!一个类只能有一个超类,因此'A类扩展B'表明A虽然*不是*“扩展”对象(它扩展了B),即使A仍然是Object的一个子类型。 – user2864740

+0

任何类都可以拥有Object,因为它是直接或间接的超类。如果'A'不扩展'Object',那么'B'的子类'A'就是。我只是猜测按照定义,因为“包括数组在内的所有对象都实现了这个类的方法(Object Class)”,Object扩展了Objects。 –

+1

这个问题是关于使用的措辞。 A *从B继承*(并且A *通过扩展从Object继承*),但是仅*扩展* B. – user2864740

2

因为Object类,在java.lang包中,坐镇类层次结构树的顶端。

+0

我喜欢使用“层次树”,但这个答案需要刷新。 – user2864740

+0

我向他解释说,对象类包含一些常用的方法,我们可以很容易地在任何类中覆盖该方法,所以他说,最后我们将自己的逻辑用于重写方法,那么为什么定义对象类需要什么? –

相关问题