class Dad {
private static final String me = "dad";
protected String getMe() {
return me;
}
protected void printMe() {
System.out.println(getMe());
}
}
class Son extends Dad {
private static final String me = "son";
protected void printMe() {
System.out.println(getMe());
}
}
class Test {
public static void main(String[] args) {
Son son = new Son();
son.printMe();
}
}
В этом случае ссылка «сын» типа «Сын» и поскольку метод printMe () нестатичен, будет выполнен код метода из класса Сын.Но поскольку класс Son не переопределил метод getMe (), будет выполнен код метода из класса предка.Таким образом, мы получаем «папа».
Второй случай:
class Dad {
private static final String me = "dad";
protected String getMe() {
return me;
}
protected void printMe() {
System.out.println(getMe());
}
}
class Son extends Dad {
private static final String me = "son";
protected String getMe() {
return me;
}
class Test {
public static void main(String[] args) {
Son son = new Son();
son.printMe();
}
}
Рассуждение аналогичным образом, в этом случае класс Son не переопределил метод printMe (), поэтому кодМетод printMe () из класса Dad должен быть выполнен.Но мы получаем «Сын». Почему?
А что тогда с наследством?То есть, если наследник не переопределяет метод предка, то они вместе делят код метода предка?