一尘不染

OBJECT类中的默认构造函数做什么?

java

我是一名Java初学者,了解以下Java编译器规则:

  1. 如果该类没有超类,则将其扩展到Object类
  2. 如果该类没有构造函数,请添加默认的无参数构造函数
  3. 如果构造函数的第一行不是“ super()”或“ this()”,请添加“ super()”以调用超类的默认构造函数。

我知道我们创建的所有对象都是从超类Object派生的。我的问题是被调用时Object类中的构造函数做什么?

编辑:我的问题是关于构造函数在类Object中做什么?我知道子类默认情况下会调用超类的构造函数。

例如,我有以下代码(在这里我明确地扩展到Object并调用super()来说明编译器的工作)。我的问题是,对super()的调用有什么作用?

public class Person extends Object
{
    private String name;
    public Person(String n)
        {   
            super();
            this.name = n;
        }
}

阅读 254

收藏
2020-12-03

共1个答案

一尘不染

我的问题是,对super()的调用有什么作用?

它调用的默认构造函数java.lang.Object。要回答您似乎真正提出的问题,请参阅Java语言规范#8.8.9。

8.8.9。默认构造函数

如果一个类不包含构造函数声明,则默认构造函数被隐式声明。顶级类,成员类或本地类的默认构造函数的形式如下:

默认构造函数具有与类(第6.6节)相同的可访问性。

除了在非私有内部成员类中之外,默认构造函数没有形式参数,在默认情况下,默认构造函数隐式声明一个表示该类的立即封闭实例的形式参数(第8.8.1节,第15.9.2节,第15.9.3节)
)。

默认构造函数没有throws子句。

如果要声明的类是原始类Object,则默认构造函数的主体为空。否则,默认构造函数将简单地调用不带参数的超类构造函数。

注意最后一段。

2020-12-03