SuperClasse
A classe SuperClasse
representa o conceito mais geral, que irá ser posteriormente especializado.
São apresentados dois cenários para ilustrar o comportamento na iniciação de um atributo declarado final.
No cenário A, o atributo é declarado, mas não tem um iniciador por omissão explÃcito. Por isso, é possÃvel definir no construtor o seu valor.
public class SuperClasse { private int _a = 78; protected final int _x; // cenário A SuperClasse(int x) { System.out.println("-- calling SuperClasse.SuperClasse(" + x + ")"); _a = (int)(100*Math.random()); _x = x; // ok: cenário A } final int getA() { System.out.println("-- calling SuperClasse.getA() returns " + _a); return _a; } protected int getX() { System.out.println("-- calling SuperClasse.getX() returns " + _x); return _x; } }
No cenário A, o atributo é declarado, mas já tem um iniciador por omissão explÃcito. Por isso, já não é possÃvel definir no construtor o seu valor.
public class SuperClasse { private int _a = 78; protected final int _x = 93; // iniciação SuperClasse(int x) { System.out.println("-- calling SuperClasse.SuperClasse(" + x + ")"); _a = (int)(100*Math.random()); //_x = x; // erro: já está iniciada } final int getA() { System.out.println("-- calling SuperClasse.getA() returns " + _a); return _a; } protected int getX() { System.out.println("-- calling SuperClasse.getX() returns " + _x); return _x; } }
SubClasse