Причина, по которой ребенок не печатает «ребенок», заключается в том, что в наследовании в 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;
}
}
Кроме того, Строковые переменные не должны быть разные имена, но я сделал это для ясности.
Другой, более читаемым способом было бы сделать это:
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
, то есть она может быть прочитана как от родителя и ребенка. Конструктор классов устанавливает переменную в нужное значение. Таким образом, вы только реализуете функцию печати один раз и не нуждаетесь в дублированном переопределенном методе.
нормально, это работает, но я не не понимаю, почему моя попытка не может работать .... –
@Martin: Потому что вы создаете полностью отдельную переменную и устанавливаете значение *, которое * в 'Child'. Класс 'Parent' не знает о переменной в' Child'. –