Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么即使我的抽象类有一个受保护的构造函数,也要创建一个默认构造函数?_Java_Constructor_Default Constructor - Fatal编程技术网

Java 为什么即使我的抽象类有一个受保护的构造函数,也要创建一个默认构造函数?

Java 为什么即使我的抽象类有一个受保护的构造函数,也要创建一个默认构造函数?,java,constructor,default-constructor,Java,Constructor,Default Constructor,我有一个抽象类MousableActor,它扩展了一个具体类Actor: 当我查看为该类生成的javadoc时,我看到一个公共的无参数构造函数: 根据: 如果一个类不包含构造函数声明,则隐式声明一个没有形式参数和没有throws子句的默认构造函数 我一直认为这是一个如果且仅当。为什么即使我显式声明了受保护的构造函数,仍要创建公共默认构造函数?它是否与拥有一个公共的无参数构造函数有关 我使用的是Greenfoot版本2.4.2,它在Java 1.8.0之上应该无关紧要。构造函数不是无效方法 应该

我有一个抽象类MousableActor,它扩展了一个具体类Actor:

当我查看为该类生成的javadoc时,我看到一个公共的无参数构造函数:

根据:

如果一个类不包含构造函数声明,则隐式声明一个没有形式参数和没有throws子句的默认构造函数

我一直认为这是一个如果且仅当。为什么即使我显式声明了受保护的构造函数,仍要创建公共默认构造函数?它是否与拥有一个公共的无参数构造函数有关

我使用的是Greenfoot版本2.4.2,它在Java 1.8.0之上应该无关紧要。

构造函数不是无效方法

应该是

protected MousableActor()
构造函数不是void方法

应该是

protected MousableActor()
因为它返回void,它不是构造函数;它是一个方法,因此没有构造函数,并且创建了默认构造函数

如果你想让它成为一个构造函数,那么就删除void。

因为它返回void,所以它不是构造函数;它是一个方法,因此没有构造函数,并且创建了默认构造函数


如果你想让它成为一个构造函数,那么就删除void。

如果你使用了一个好的IDE,它会告诉你有一个问题,例如Eclipse显示警告说这个方法有一个构造函数名。问题很好,很清楚,付出了很多努力,尽管这个解决方案有点尴尬:@zapl谦逊课程对我这样的CS教授来说总是很好的。我的学生喜欢听到我的错误,这让他们对自己的错误感觉更好。我们应该添加一个标记pebcak吗?如果你使用了一个好的IDE,它会告诉你有一个问题,例如Eclipse显示警告此方法有一个构造函数名。问题很好,很清楚,需要付出很多努力,尽管这个解决方案有点尴尬:@zapl谦逊课程对我这样的CS教授来说总是很好的。我的学生喜欢听到我的错误,这让他们对自己的错误感觉更好。我们应该加一个标签pebcak吗?哦!我没有意识到一个方法可以和一个构造函数有相同的名称,我没有意识到键入了void!我没有意识到一个方法可以和一个构造函数同名,也没有意识到键入了void。
protected MousableActor()