С таким простым примером, как ваш, ничего плохого не может произойти. Тем не менее, возможно , чтобы поле final
можно было видеть неинициализированным, если вы используете сомнительные методы, такие как вызов переопределенного метода в конструкторе.
Например, следующая программа печатает «Мой любимый цвет - ноль», даже если она ссылается на конечную переменную favouriteColour
, которая в конструкторе установлена на "blue"
.
abstract class SuperClass {
final String favouriteColour;
SuperClass() {
announceFavouriteColour();
favouriteColour = "blue";
}
abstract void announceFavouriteColour();
}
public class FinalTest extends SuperClass {
void announceFavouriteColour() {
System.out.println("My favourite colour is " + favouriteColour);
}
public static void main(String[] args) {
new FinalTest();
}
}