상위 클래스의 필드를 자신의 생성자에서 초기화하고, 하위 클래스의 해당 생성자에 위임하는 것이 바람직합니다. 이렇게 하면 생성 후 필드가 변경되지 않은 경우 이 필드를 final로 선언할 수도 있습니다.
예:
class Super {
int x;
}
class Sub extends Super {
Sub(int _x) {
// Warning: x is declared in a superclass
x = _x;
}
}
이 문제를 방지하기 위해 상위 클래스 생성자를 선언하세요.
class Super {
final int x;
Super(int _x) {
x = _x;
}
}
class Sub extends Super {
Sub(int _x) {
super(_x);
}
}