没有自变量构造函数的超类

-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)

Hov*_*els 5

这个假设是错误的:

在这里,我在超类中没有no-arg构造函数,但是它没有显示任何错误。

如果一个类没有显式构造函数,则它将隐含一个无参数构造函数。

请查看此相关的Stack Overflow问题以获取更多信息:Java默认构造函数

还要查看Java语言规范:第8.8.9节。默认构造函数

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

  • 默认构造函数具有与类(第6.6节)相同的可访问性。
  • 除了在非私有内部成员类中之外,默认构造函数没有形式参数,在默认情况下,默认构造函数隐式声明一个表示该类的立即封闭实例的形式参数(第8.8.1节,第15.9.2节,第15.9.3节) )。
  • 默认构造函数没有throws子句。
  • 如果要声明的类是原始类Object,则默认构造函数的主体为空。否则,默认构造函数将简单地调用不带参数的超类构造函数。