Why can't constructors be final, static, or abstract?

sachin picture sachin · Feb 28, 2012 · Viewed 93.7k times · Source

Why can't constructors be final, static, or abstract in Java?

For instance, can you explain to me why this is not valid?

public class K {

    abstract public K() {
        // ...
    }
}

Answer

user1232256 picture user1232256 · Feb 28, 2012

When you set a method as final it means: "I don't want any class override it." But according to the Java Language Specification:

JLS 8.8 - "Constructor declarations are not members. They are never inherited and therefore are not subject to hiding or overriding."

When you set a method as abstract it means: "This method doesn't have a body and it should be implemented in a child class." But the constructor is called implicitly when the new keyword is used so it can't lack a body.

When you set a method as static it means: "This method belongs to the class, not a particular object." But the constructor is implicitly called to initialize an object, so there is no purpose in having a static constructor.