抽象类可以有构造函数吗?

如果可以,如何使用它,用于什么目的?


当前回答

是的,它可以,抽象类构造函数通常用于所有子类通用的初始化事件的超级调用

其他回答

如果你处于以下情况之一,你可以在抽象类中定义构造函数:

你想要表演一些 属性的字段的初始化 抽象类)之前 一个子类的实例化 发生 属性中定义了最终字段 抽象类,但你没有 在声明中初始化它们 本身;在这种情况下,你必须 初始化这些函数的构造函数 字段

注意:

您可以定义多个 构造函数(使用不同的 参数) 你可以(应该?)定义你所有的 构造函数受保护(使它们 反正公开是没有意义的) 你的子类构造函数可以 调用摘要的一个构造函数 类;它甚至可能不得不调用它 (如果没有无参数构造函数 在抽象类中)

在任何情况下,不要忘记如果你没有定义构造函数,那么编译器将自动为你生成一个构造函数(这个构造函数是公共的,没有参数,什么也不做)。

当然,抽象类可以有构造函数。通常使用类构造函数初始化字段。因此,抽象类构造函数用于初始化抽象类的字段。如果您想在子类实例化之前初始化抽象类的某些字段,则需要为抽象类提供构造函数。抽象类构造函数还可以用于执行与每个子类相关的代码。这可以防止代码复制。

我们不能创建抽象类的实例,但是我们可以创建从抽象类派生的类的实例。因此,当创建派生类的实例时,父抽象类构造函数将被自动调用。

参考:这篇文章

是的。当创建继承类的实例时,调用抽象类的构造函数。例如,下面是一个有效的Java程序。

// An abstract class with constructor
abstract class Base {
Base() { System.out.println("Base Constructor Called"); }
abstract void fun();
    }
class Derived extends Base {
Derived() { System.out.println("Derived Constructor Called"); }
void fun() { System.out.println("Derived fun() called"); }
    }

class Main {
public static void main(String args[]) { 
   Derived d = new Derived();
    }

}

这是上面代码的输出,

基本构造函数Called 派生构造函数调用

引用: 在这里输入链接描述

抽象类可以有构造函数,但它不能被实例化。但抽象类中定义的构造函数可用于该抽象类的具体类的实例化。检查JLS组合:

如果试图使用类实例创建创建抽象类的实例,则会出现编译时错误 表达式。 抽象类的子类本身可能不是抽象的 对象的构造函数的执行 抽象类,因此,字段初始化式的执行 对于该类的实例变量。

是的,它可以有一个构造函数,它的定义和行为就像任何其他类的构造函数一样。除了抽象类不能直接实例化,只能扩展,因此使用总是来自子类的构造函数。