我是一名Java初学者,了解以下Java编译器规则:
我知道我们创建的所有对象都是从超类Object派生的。我的问题是被调用时Object类中的构造函数做什么?
编辑:我的问题是关于构造函数在类Object中做什么?我知道子类默认情况下会调用超类的构造函数。
例如,我有以下代码(在这里我明确地扩展到Object并调用super()来说明编译器的工作)。我的问题是,对super()的调用有什么作用?
public class Person extends Object { private String name; public Person(String n) { super(); this.name = n; } }
我的问题是,对super()的调用有什么作用?
它调用的默认构造函数java.lang.Object。要回答您似乎真正提出的问题,请参阅Java语言规范#8.8.9。
java.lang.Object
8.8.9。默认构造函数 如果一个类不包含构造函数声明,则默认构造函数被隐式声明。顶级类,成员类或本地类的默认构造函数的形式如下: 默认构造函数具有与类(第6.6节)相同的可访问性。 除了在非私有内部成员类中之外,默认构造函数没有形式参数,在默认情况下,默认构造函数隐式声明一个表示该类的立即封闭实例的形式参数(第8.8.1节,第15.9.2节,第15.9.3节) )。 默认构造函数没有throws子句。 如果要声明的类是原始类Object,则默认构造函数的主体为空。否则,默认构造函数将简单地调用不带参数的超类构造函数。
8.8.9。默认构造函数
如果一个类不包含构造函数声明,则默认构造函数被隐式声明。顶级类,成员类或本地类的默认构造函数的形式如下:
默认构造函数具有与类(第6.6节)相同的可访问性。
除了在非私有内部成员类中之外,默认构造函数没有形式参数,在默认情况下,默认构造函数隐式声明一个表示该类的立即封闭实例的形式参数(第8.8.1节,第15.9.2节,第15.9.3节) )。
默认构造函数没有throws子句。
如果要声明的类是原始类Object,则默认构造函数的主体为空。否则,默认构造函数将简单地调用不带参数的超类构造函数。
Object
注意最后一段。