-3 java inheritance default-constructor
根据Oracle的文档https://docs.oracle.com/javase/tutorial/java/IandI/super.html,其书面内容是:如果超类没有无参数构造函数,则会出现编译时错误。
但就我而言,我有一个没有任何构造函数的超类。在我的基类中,我正在其无参数构造函数中编写super()。在这里,我在超类中没有no-arg构造函数,但是它没有显示任何错误。
class Person {
}
Run Code Online (Sandbox Code Playgroud)
/* subclass Student extending the Person class */
class Student extends Person {
Student() {
// invoke or call parent class constructor
super();
System.out.println("Student class Constructor");
}
}
Run Code Online (Sandbox Code Playgroud)
// Driver class
class Practice {
public static void main(String[] args) {
Student s = new Student();
}
}
Run Code Online (Sandbox Code Playgroud)
这个假设是错误的:
在这里,我在超类中没有no-arg构造函数,但是它没有显示任何错误。
如果一个类没有显式构造函数,则它将隐含一个无参数构造函数。
请查看此相关的Stack Overflow问题以获取更多信息:Java默认构造函数
如果一个类不包含构造函数声明,则默认构造函数被隐式声明。顶级类,成员类或本地类的默认构造函数的形式如下:
- 默认构造函数具有与类(第6.6节)相同的可访问性。
- 除了在非私有内部成员类中之外,默认构造函数没有形式参数,在默认情况下,默认构造函数隐式声明一个表示该类的立即封闭实例的形式参数(第8.8.1节,第15.9.2节,第15.9.3节) )。
- 默认构造函数没有throws子句。
- 如果要声明的类是原始类Object,则默认构造函数的主体为空。否则,默认构造函数将简单地调用不带参数的超类构造函数。
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |