Il motivo per cui child non sta stampando "child" è che in ereditarietà in java, solo i metodi sono ereditati, non i campi. La variabile output
non viene sovrascritta dal bambino.
Si potrebbe fare così:
public class Parent {
private String parentOutput = "hallo";
String getOutput() {
return output;
}
public void print() {
System.out.println(getOutput());
}
}
public class Child extends Parent {
private String childOutput = "child";
String getOutput() {
return output;
}
}
Inoltre, le variabili stringa non c'è bisogno di essere nomi diversi, ma l'ho fatto qui per chiarezza.
Un altro modo più leggibile sarebbe quello di fare questo:
public class Parent {
protected String output;
public Parent() {
output = "hallo";
}
public void print() {
System.out.println(output);
}
}
public class Child extends Parent {
public Child() {
output = "child";
}
}
In questo esempio la variabile è protected
, il che significa che può essere letta sia dal genitore e figlio. Il costruttore delle classi imposta la variabile sul valore desiderato. In questo modo si implementa la funzione di stampa solo una volta e non è necessario un metodo sovrascritto duplicato.
fonte
2010-11-15 19:57:45
ok, funziona, ma indosso non capisco perché il mio tentativo non è in grado di lavorare .... –
@ Martin: A causa stavi creando una variabile completamente separata e impostando il valore di * that * in 'Child'. La classe 'Parent' non è a conoscenza della variabile in' Child'. –