Search code examples
javaconstructordefault-constructor

Why is a default constructor created even though my abstract class has a protected constructor?


I have an abstract class MousableActor that extends a concrete class Actor:

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

When I look at the javadoc generated for the class, I see a public no-args constructor: described in text

According to Section 8.8.9 of the JLS:

If a class contains no constructor declarations, then a default constructor with no formal parameters and no throws clause is implicitly declared.

I always considered that an if-and-only-if. Why is a public default constructor being created even though I explicitly declared a protected constructor? Does it have something to do with the superclass having a public no-args constructor?

I am using Greenfoot version 2.4.2 (which shouldn't matter) on top of Java 1.8.0.


Solution

  • A constructor is not a void method.

    protected void MousableActor()
    

    should be

    protected MousableActor()