In un programma Java, ho più sottoclassi che ereditano da un genitore (che è astratto). Volevo esprimere che ogni bambino dovrebbe avere un membro impostato una sola volta (cosa che stavo pensando di fare dal costruttore). Il mio piano era di codificare s.th. In questo modo:In Java, perché non posso dichiarare un membro finale (senza inizializzarlo) nella classe genitore e impostare il suo valore nella sottoclasse? Come posso lavorare intorno?
public abstract class Parent {
protected final String birthmark;
}
public class Child extends Parent {
public Child(String s) {
this.birthmark = s;
}
}
Tuttavia, questo sembra non piacere agli dei Java. Nella classe genitore, ricevo il messaggio che "birthmark
" potrebbe non essere stato inizializzato ", nella classe figlia ottengo" Non è possibile accedere al campo finale birthmark
".
Quindi qual è il modo Java per questo? Cosa mi manca?
Non una risposta diretta, ma nel formato file di classe i campi dell'istanza finale possono essere impostati solo dallo stesso file di classe ma non necessariamente nel costruttore. IIRC. –
Domanda correlata: http://stackoverflow.com/questions/14383276/initialize-member-of-abstract-class-without-subclasses-having-write-access – user905686