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
메서드를 실행해야합니다. 요점은, superclass에서 상속받은 public 메소드에서 어떤 private 메소드가 호출 되는가입니다. 그리고 왜?Java : superclass에서 상속 된 public 메서드는 private 메서드를 호출합니다.
나는 s.printPerson()
에서 생각했는데 getInfo()
은 Student
입니다. 그러나 그것은 밝혀지지 않았습니다. IDE에서 나에게 알립니다.
private String getInfo(){
return "Student";
}
절대 사용하지 마십시오.
누구든지 나를 도와 줄 수 있습니까?
클래스'Person'에서'getInfo()'를 호출하면 "Person"이 출력된다는 것을 이해합니다. 하지만 제 코드에서는'Person'이 아니라'Student' 클래스에서'getInfo()'를 호출합니다. 'Student'에서'getInfo()'를 호출하면'Student'가 아닌'Person'의'printPerson()'메소드를 호출하는 것으로 보입니다. 나는이 문제와 혼동을 느낀다. – RogerS
코드를 조금 수정합니다. 나는'Student'의'getInfo()'를'Person'에서 정확히 같은 코드로 덮어 씁니다. 이제 결과는 "학생"입니다. 상속 방법의 메커니즘에 대해 궁금합니다. 나는 출력이 같아야한다고 생각했다. getInfo()를 오버라이드했는지 아닌지, 메소드의 내용이 같아서 출력이 동일해야하기 때문이다. 아무도 이걸로 나를 도울 수 있습니까? 고마워. – RogerS