首页 > 解决方案 > 没有无参数构造函数的超类

问题描述

根据 Oracle 的文档https://docs.oracle.com/javase/tutorial/java/IandI/super.html,它写道如果超类没有无参数构造函数,则会出现编译时错误.

但就我而言,我有一个没有任何构造函数的超类。在我的基类中,我在其无参数构造函数中编写 super()。在这里,我在超类中没有无参数构造函数,但它没有显示任何错误。

class Person { 

} 
/* subclass Student extending the Person class */
class Student extends Person { 
    Student() { 
        // invoke or call parent class constructor 
        super(); 
        System.out.println("Student class Constructor"); 
    } 
} 
// Driver class 
class Practice {
    public static void main(String[] args) {
        Student s = new Student(); 
    }
}

标签: javainheritancedefault-constructor

解决方案


这个假设是错误的:

在这里,我在超类中没有无参数构造函数,但它没有显示任何错误。

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

请查看这个相关的 Stack Overflow 问题以了解更多信息:Java 默认构造函数

另请查看Java 语言规范:§8.8.9。默认构造函数

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

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

推荐阅读