La razón por la cual child no está imprimiendo "child" es que en herencia en java, solo los métodos son heredados, no campos. La variable output
no es anulada por el niño.
Se podía hacerlo de esta manera:
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;
}
}
Además, las variables de cadena no necesitan ser diferentes nombres, pero lo he hecho aquí para mayor claridad.
Otra forma más legible sería hacer esto:
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";
}
}
En este ejemplo, la variable es protected
, lo que significa que se puede leer de los padres y el niño. El constructor de las clases establece la variable al valor deseado. De esta forma, solo implementará la función de impresión una vez y no necesitará un método duplicado reemplazado.
bien, funciona, pero yo no entiendo por qué no mi intento no es capaz de trabajar .... –
@ Martin: Porque Estabas creando una variable completamente separada y estableciendo el valor de * that * en 'Child'. La clase 'Parent' no tiene conocimiento de la variable en' Child'. –