我在Java视频教程中看到的以下代码(类的缩写版本)。
public class Address {
private String firstName;
private String lastName;
public Address() {
super();
}
public Address(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
...
}
此处显示的类没有extend
个关键字。尽管如此,super()
在没有参数的构造函数中使用。
它调用Object类的构造函数?我是对的吗?
但为什么呢?
拨打super()
?
答案 0 :(得分:4)
这是你让IDE自动生成你的类的构造函数时所得到的...因为该类没有扩展任何东西,所以调用super与调用对象类的构造函数相同,实际上没有任何影响在Address
类实现
所以在你的情况下
public Address() {
super();
}
与
相同public Address() {
}
答案 1 :(得分:3)
创建类的实例时,将调用超类的构造函数。如果您的类明确地扩展,有两个选项:
调用不带参数的super()基本上意味着您调用默认构造函数。这没有必要,因为即使你没有明确地这样做,它也会被调用。
由于java中的所有对象都隐式扩展了Object,因此在创建类的实例时始终会调用Object的默认构造函数。 super()只是让它显而易见。但是,为什么我们应该对已经很清楚的事情加上明确性。
此外,当您使用代码生成工具(例如Eclipse)时,IDE有时会添加它。
你可以阅读关于类/超类的consturtors如何在OCA准备的书中工作的非常好的描述:https://www.amazon.com/OCA-Certified-Associate-Programmer-1Z0-808/dp/1118957407