关于java:抽象类中的构造函数有什么用?

What use are constructors in abstract classes?

本问题已经有最佳答案,请猛点这里访问。

既然我们不能实例化一个抽象类,那么在抽象类中有构造函数的必要性是什么?


抽象类被设计为被扩展,子类中的每个构造函数都必须从基类执行对构造函数的调用,因此抽象类中需要构造函数。

抽象类是一个骨架,因此直接实例化它是没有意义的,因为它仍然是不完整的(子类将提供其余的部分)。


我们可以使用抽象类构造函数来执行与每个子类相关的代码。这样可以防止重复代码


一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public abstract class BaseClass
{
    private String member;

    public BaseClass(String member)
    {
        this.member = member;
    }

    ... abstract methods...
}

public class ImplementingClass extends BaseClass
{
    public ImplementingClass(String member)
    {
        /* Implementing class must call a constructor from the abstract class */
        super(member);
    }

    ... method implementations...
}

抽象类可以有字段和非抽象方法(这使得它比接口更抽象)。当实例化扩展字段的类时,可能需要初始化字段。

在抽象类中拥有一个构造函数允许您调用super(foo);来初始化它们,而不是直接进行初始化。