Причина, по которой child не печатает «child», заключается в том, что при наследовании в java наследуются только методы, а не поля. Переменная output
не переопределяется дочерним элементом.
Вы можете сделать это так:
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;
}
}
Кроме того, переменные String не обязательно должны иметь разные имена, но я сделал это здесь для ясности.
Другой, более читаемый способ сделать это:
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";
}
}
В этом примере переменная protected
, что означает, что она может быть прочитана как родителем, так и потомком. Конструктор классов устанавливает переменную в желаемое значение. Таким образом, вы реализуете функцию печати только один раз и не нуждаетесь в дублирующем переопределенном методе.