在Java中的抽象类中使用构造函数有什么意义?

What's the point of having a constructor in an abstract class in Java?

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

如果永远不打算从该类实例化一个对象,那么什么时候使用它的构造函数呢?对不起,如果我表现得无知。我刚刚在我的高中开始了一个关于Java的课程。


因为子类可以使用它。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public abstract class Foo {
    protected String name;
    public Foo(String name) {
        this.name = name;
    }
}

public class Bar extends Foo {
    public Bar(String name) {
        super(name); //<-- necessary, otherwise it won't compile
    }

    public Bar() {
        super("default name"); // <-- necessary, otherwise it won't compile
    }
}

您可以在父类中初始化一些内容,所以可能需要在抽象类中使用构造函数。


您的父类或抽象类通过所有子类或子类存储公共变量。这使得将不同的对象(具有相同的父对象)存储到集合(如和arraylist)中变得更容易。它还允许您轻松地操作和对象,而不必担心子类中包含的细节。通过在子类中调用super()来实例化构造函数。


您有一个构造函数,这样子类就可以正确地初始化其父类的状态。

1
2
3
4
5
6
7
8
9
10
11
public abstract class Parent {
    private final String name;

    public Parent(String n) { this.name = n; }

    public String getName() { return this.name; }
}

public class Child extends Parent {
    public Child(String name) { super(name); }
}

如果没有构造函数,就没有其他方法来初始化Parent中的private final String name属性。