![]() |
1
11
子类的每个构造函数必须调用超类的构造函数作为其第一个操作。在构造函数完成之前,必须初始化每个最终成员变量。最后一个变量只能分配一次。根据这些规则,子类构造函数不可能直接将值赋给
例外会增加复杂性并创建“gotchas”,以换取有限的额外效用。
一个实际的解决方案是提供一个超类构造函数,它接受一个值分配给最终成员。这可以
|
![]() |
2
6
如果允许您将值赋给
如果您的示例是有效的,那么这意味着
一个更好的问题是,为什么 应该 你希望被允许的行为? |
![]() |
3
3
非正式地,最终字段应该在构造函数完成时初始化。 在子类构造函数中,super()已被隐式调用,父类的构造函数已完成,不应修改父类中的最后字段。 您可能需要这样做:
|
![]() |
4
1
这是Java中的标准行为。 关键字final可以通过多种方式使用,对于类关闭从中继承的可能性,对于方法重写它,对于变量只允许在简单的单词中分配一次。 对于您的案例,这个变量已经在超级类中分配好了, 你能做的就是
|
![]() |
5
0
作为对Matt答案的回应,您可以通过在构造函数中传递常量来确定子类中的常量:
|