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();)에서는
상속을 받지 못했으니 에러가 나야 하는게 아닌가요?
sehongpark님의 답변
# 접근제한자와 오버라이딩
## 요약
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 도 상속 됩니다.