为什么我们在java中没有抽象构造函数?

时间:2015-03-03 06:34:52

标签: java

我想知道java中的设计考虑是什么阻止了这样的类?

public abstract class A{
    public abstract A();
}

如果我们可以强制构造函数的实现,那么我们可以实例化抽象类。但为什么他们不呢?这是违反OOP设计还是根本不可能?

4 个答案:

答案 0 :(得分:4)

抽象构造函数没有意义。

抽象方法强制所有具体子类实现相同签名的方法(包括相同的名称)。

但是,具体的子类不能实现与抽象类的“抽象构造函数”同名的构造函数,因为构造函数必须具有它所在的类的名称。

答案 1 :(得分:0)

您不能拥有抽象构造函数,因为抽象意味着您需要在子类中的某个时间点为其提供实现。但是你不能覆盖构造函数。有一个抽象的构造函数是没有意义的:

  1. 由于构造函数需要与类名相同。
  2. 您将始终调用子类的构造函数而不是基类 类
  3. 抽象构造函数没有任何意义,因为构造函数与特定类型的对象创建直接相关。此外,我们无法为给定类中的任何其他类定义构造函数。

    但如果您仍想强制执行此类模式,则需要使用抽象工厂模式

答案 2 :(得分:0)

抽象修饰符适用于那些尚未实现的人。

考虑到一种情况(就像你刚才提到的那种情况),构造函数本身是抽象的,因此它的类创建实际上不会发生。

<强>为什么

对于要存在的类,系统将自动调用其默认构造函数。但是现在你已经提供了自己的构造函数(另外它是抽象的),默认的构造函数将不存在,因此这个类将不存在。

因此存在不一致的情况。

希望它有所帮助。

答案 3 :(得分:0)

当你将构造函数设置为'abstract'时,你实际上是在说:

  

此构造函数没有正文,您希望在子类

中的其他时间实现它

但是,在创建Object时会隐式调用构造函数,因此我们无法实现构造函数,这就是构造函数不是抽象的原因。

abstract class BaseClass {
  abstract BaseClass() // compile time error
}