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

时间:2015-11-21 00:50:59

标签: java constructor default-constructor

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

public abstract class MousableActor extends Actor
{   
    /**
     * Constructs a MousableActor.
     */
    protected void MousableActor()
    {
    }
}

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

根据Section 8.8.9 of the JLS

  

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

我一直认为这是一个if-and-only-if。为什么即使我显式声明了受保护的构造函数,也会创建公共默认构造函数?它是否与the superclass具有公共no-args构造函数有关?

我在Java 1.8.0之上使用Greenfoot版本2.4.2(这应该不重要)。

2 个答案:

答案 0 :(得分:5)

构造函数不是void方法。

protected void MousableActor()

应该是

protected MousableActor()

答案 1 :(得分:2)

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

如果您打算将其作为构造函数,请删除void