public class Test {
public static void main(String args[]){
Student s = new Student();
s.printPerson();
}
}
class Person{
private String getInfo(){
return "Person";
}
public void printPerson(){
System.out.println(getInfo());
}
}
class Student extends Person{
private String getInfo(){
return "Student";
}
}
Выходной сигнал Person
. Я смущен этим результатом. В основном методе ссылочный тип: Student
. Поэтому при выполнении s.printPerson()
он должен выполнить метод Student
. Ключевым моментом является то, что в общедоступном методе, унаследованном от суперкласса, какой частный метод вызывается? И почему?Java: Открытый метод, унаследованный от суперкласса, вызывает частный метод.
Я думал в s.printPerson()
, он вызывает getInfo()
от Student
. Но это не так. IDE сообщает мне
private String getInfo(){
return "Student";
}
не используется.
Может ли кто-нибудь помочь мне с этим, пожалуйста?
Если я вызываю 'getInfo()' из класса 'Person', я понимаю, что он выводит« Person ». Но в моем коде я вызываю 'getInfo()' из класса 'Student', а не' Person'. Я вызываю 'getInfo()' из 'Student', он, кажется, вызывает' printPerson() 'метод' Person', а не 'Student'. Я смущен этой проблемой. – RogerS
Я немного модифицирую код. Я переопределяю 'getInfo()' в 'Student' с точно таким же кодом в' Person'. Теперь выход «Студент». Меня интересует механизм наследования методов. Я думал, что вывод должен быть таким же, потому что, если я переопределяю 'getInfo()' или нет, содержимое метода будет таким же, поэтому вывод должен быть тем же. Кто-нибудь может мне помочь? большое спасибо. – RogerS