为什么构造函数不能是最终的、静态的或抽象的?

2022-08-31 11:47:17

为什么构造函数在 Java 中不能是最终的、静态的或抽象的?

例如,你能向我解释为什么这是无效的吗?

public class K {

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

答案 1

当你设置一个方法时,它的意思是:“我不希望任何类覆盖它。但根据Java语言规范:final

JLS 8.8 - “构造函数声明不是成员。它们永远不会被继承,因此不会被隐藏或覆盖。

当你设置一个方法时,它的意思是:“这种方法没有主体,它应该在子类中实现。但是,当使用关键字时,构造函数是隐式调用的,因此它不能缺少正文。abstractnew

当您设置方法时,它的意思是:“此方法属于类,而不是特定对象。但是构造函数是隐式调用来初始化对象的,因此具有静态构造函数是没有目的的。static


答案 2

问题真的是为什么您希望构造函数是 .static or abstract or final

构造函数不是继承的,因此不能被覆盖,因此具有最终构造函数有什么用

构造函数在创建类的实例时自动调用,它有权访问类的实例字段。静态构造函数的用法是什么。

构造函数不能被覆盖,所以你将如何处理抽象构造函数。