我想知道java中的设计考虑是什么阻止了这样的类?
public abstract class A{
public abstract A();
}
如果我们可以强制构造函数的实现,那么我们可以实例化抽象类。但为什么他们不呢?这是违反OOP设计还是根本不可能?
答案 0 :(得分:4)
抽象构造函数没有意义。
抽象方法强制所有具体子类实现相同签名的方法(包括相同的名称)。
但是,具体的子类不能实现与抽象类的“抽象构造函数”同名的构造函数,因为构造函数必须具有它所在的类的名称。
答案 1 :(得分:0)
您不能拥有抽象构造函数,因为抽象意味着您需要在子类中的某个时间点为其提供实现。但是你不能覆盖构造函数。有一个抽象的构造函数是没有意义的:
抽象构造函数没有任何意义,因为构造函数与特定类型的对象创建直接相关。此外,我们无法为给定类中的任何其他类定义构造函数。
但如果您仍想强制执行此类模式,则需要使用抽象工厂模式
答案 2 :(得分:0)
抽象修饰符适用于那些尚未实现的人。
考虑到一种情况(就像你刚才提到的那种情况),构造函数本身是抽象的,因此它的类创建实际上不会发生。
<强>为什么强>
对于要存在的类,系统将自动调用其默认构造函数。但是现在你已经提供了自己的构造函数(另外它是抽象的),默认的构造函数将不存在,因此这个类将不存在。
因此存在不一致的情况。
希望它有所帮助。
答案 3 :(得分:0)
当你将构造函数设置为'abstract'时,你实际上是在说:
此构造函数没有正文,您希望在子类
中的其他时间实现它
但是,在创建Object时会隐式调用构造函数,因此我们无法实现构造函数,这就是构造函数不是抽象的原因。
abstract class BaseClass {
abstract BaseClass() // compile time error
}