11.20 ``` public class Test { public static void main(String[] args) { new Person().printPerson(); new Student().printPerson(); } } class Student extends Person { **private** String getInfo() { return "Student"; } } class Person { **private** String getInfo() { return "Person"; } public void printPerson() { System.out.println(getInfo()); } } ``` **A. Person Person** B. Person Student C. Student Student D. Student Person 정답은 A 인데요. 궁금한건 부모 클래스가 private인 경우에는 자식 클래스가 상속받지 못하는 걸로 알고 있습니다. 이런 경우에는 첫 번째 Person을 출력하고(new Person().printPerson();) 두 번째( new Student().printPerson();)에서는 상속을 받지 못했으니 에러가 나야 하는게 아닌가요?
# 접근제한자와 오버라이딩 ## 요약 private 키워드는 오버라이딩(재정의) 되지 않습니다. ## 설명 위 문제의 키포인트는 두 가지 입니다. 첫째로, 'printPerson() 메소드가 어느 클래스에서 정의되었는가?'입니다. 코드를 보면 Person 클래스 내부에 정의 되어있음을 알 수 있습니다. ``` class Person { private String getInfo() { return "Person"; } public void printPerson() { System.out.println(getInfo()); } } ``` 둘째로, 'private 메소드는 오버라이딩 되는가?' 입니다. 이에 대한 정답은 X 입니다. (참조: https://goo.gl/DdTdaF) 이를 정리하면 printPerson() 메소드는 getInfo() 메소드를 내부적으로 호출하는데 getInfo() 메소드는 오버라이딩 되지 않기 때문에 "Person"이라는 문자열만 출력이 됩니다. ## PS private 도 상속 됩니다.