Dáv*_*áth 2 java inheritance final
在Java中,我们可以final在基类及其子类中以及基类中的内联初始化块中初始化构造函数中的字段.但是,似乎我们无法初始化final子类中的内联初始化程序块中的字段.此行为主要影响super无法调用构造函数的匿名类.
abstract class MyTest {
final protected int field;
public MyTest() {
// default value
field = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
MyTest anonymTest = new MyTest() {
{
// Error: The final field MyTest.field cannot be assigned
field = 3;
}
};
Run Code Online (Sandbox Code Playgroud)
有没有办法初始化finalanonymus类中的继承字段?
注释:这个问题不是关于构造函数,而是关于最终字段初始化.
您必须在声明期间或构造函数中初始化最终实例变量.但是,您可以为构造函数提供值
abstract class MyTest {
final protected int field;
public MyTest() {
// default value
this(0);
}
public MyTest(int f) {
field = f;
}
}
MyTest anonymTest = new MyTest(3) {
};
Run Code Online (Sandbox Code Playgroud)
更新:添加了使用默认值的构造函数