java - 没有无参数构造函数的超类
问题描述
根据 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();
}
}
解决方案
这个假设是错误的:
在这里,我在超类中没有无参数构造函数,但它没有显示任何错误。
如果一个类没有显式构造函数,那么它将有一个隐含的无参数构造函数。
请查看这个相关的 Stack Overflow 问题以了解更多信息:Java 默认构造函数
如果类不包含构造函数声明,则隐式声明默认构造函数。顶级类、成员类或本地类的默认构造函数形式如下:
- 默认构造函数具有与类相同的可访问性(第 6.6 节)。
- 默认构造函数没有形式参数,除非在非私有内部成员类中,默认构造函数隐式声明一个形式参数,表示该类的直接封闭实例(第 8.8.1 节、第 15.9.2 节、第 15.9.3 节)。
- 默认构造函数没有 throws 子句。
- 如果声明的类是原始类 Object,则默认构造函数的主体为空。否则,默认构造函数只是调用不带参数的超类构造函数。
推荐阅读
- java - 与组相关的元素的自增序列号。春季应用
- javascript - 检查 div 中是否存在属性和值
- android - 当我检查开发人员选项时,前台服务不显示通知并且不运行
- php - 模拟 Microsoft 登录功能
- sql - SQL - 通过对 2 个表的连接结果进行计算来创建新列
- javascript - 为什么这个函数中的“this”关键字在 JavaScript 中没有给出重复错误?
- variables - GNU Make 条件 ifneq 检查至少一个变量 not 不为空
- python - 加密/解密整个文件
- excel - 对 Excel 工作表中的列进行排序:将相同的值放入同一列
- jquery - 当从 laravel 控制器调用 html 时,owl carousal 被破坏