抽象类中的最后一个变量
2022-09-04 02:29:59
在Java中,我无法创建抽象类的实例。那么,为什么日食不对下面的代码尖叫呢?
public abstract class FooType {
private final int myvar;
public FooType() {
myvar = 1;
}
}
在Java中,我无法创建抽象类的实例。那么,为什么日食不对下面的代码尖叫呢?
public abstract class FooType {
private final int myvar;
public FooType() {
myvar = 1;
}
}
代码很好,最后一个变量在 的构造函数中初始化。FooType
您无法实例化,因为它是抽象的。但是如果你创建一个非抽象的子类,构造函数将被调用。FooType
FooType
如果在构造函数中没有显式调用,Java 编译器将自动添加它。因此,可以确保调用继承链中每个类的构造函数。super(...)
您可以拥有构造函数,方法,属性,抽象类中的所有内容,也可以在非抽象类中拥有。你只是无法实例化类。所以这段代码没有错。
在派生类中,您可以调用构造函数并设置最终属性:
public class Foo extends FooType
{
public Foo()
{
super(); // <-- Call constructor of FooType
}
}
如果您没有指定对 super() 的调用,则编译器无论如何都会插入它。