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