无法在构造函数中为继承的类重新分配最终变量

时间:2019-08-27 16:05:04

标签: java variables inheritance constructor final

我在互联网上检查了是否可以在java中的构造函数中重新分配最终变量,并且在所有可能的地方进行了重新赋值。但是对我来说,在2019年6月的月食中,尝试这样做会给我一个错误:

Here what it gives me

谢谢您的帮助!

以下与文本相同的代码:

public class FinalClass {
  final int n = 5;
}

class InheritedClass extends FinalClass {
    {
        n = 6;
    }
}

从命令行编译时会产生此错误:

C:\stuff>javac FinalClass.java
FinalClass.java:7: error: cannot assign a value to final variable n
        n = 6;
        ^
1 error

1 个答案:

答案 0 :(得分:4)

  

如果您可以在Java的构造函数中以及在所有可能的地方重新分配最终变量

他们确实说,您可以(实际上:必须)从类自己的构造函数中准确地一次分配一次。

他们没有说您可以重新分配最终字段,也没有说您可以从子类构造函数中完成。他们不这么说,因为你不能。

如果希望由子类指定该值,则需要一个protected构造函数,子类可以调用该构造函数。而且由于无法重新分配值,因此需要编写一个无参数的构造函数来设置默认值。

public class FinalClass {
    final int num;

    public FinalClass() {
        this.num = 5; // or: this(5);
    }

    protected FinalClass(int num) {
        this.num = num;
    }
}

public class InheritedClass extends FinalClass {
    public InheritedClass() {
        super(6);
    }
}