다음 클래스 다이어그램은 Shape 클래스와 그 하위 클래스 Recta… | [7급 국가직 소프트웨어공학] 26년 1회차 기출문제 상세 페이지
1[7급 국가직 소프트웨어공학] 26년 1회차
다음 클래스 다이어그램은 Shape 클래스와 그 하위 클래스 Rectangle, Triangle의 관계를 나타낸 것이다. 아래 코드 실행 결과를 올바르게 예측한 것은?Shape p1 = new Rectangle();
Shape p2 = new Triangle();
p1.getArea();
p2.getArea();
1
getArea()는 하위 클래스에만 선언되어 있기 때문에 컴파일 오류가 발생한다.
2
p1.getArea()와 p2.getArea() 모두 Shape 클래스의 getArea()가 실행된다.
3
p1.getArea()는 Rectangle의 메서드가, p2.getArea()는 Triangle의 메서드가 실행된다.
4
Rectangle이나 Triangle은 Shape의 메서드를 상속받기 때문에 각각의 getArea()는 실행되지 않는다.
해설
p1.getArea()는 Rectangle의 메서드가, p2.getArea()는 Triangle의 메서드가 실행된다 — 오버라이딩과 동적 바인딩의 결과이다.
다이어그램에서 getArea()는 Shape에 선언되어 있고 두 하위 클래스가 이를 재정의한다. 참조 변수의 타입이 Shape여도 호출될 메서드는 실행 시점의 실제 객체 타입으로 결정되므로 각 하위 클래스의 구현이 호출된다.
- getArea()가 하위 클래스에만 있어 컴파일 오류가 난다는 설명은 틀렸다. Shape에도 선언되어 있으므로 Shape 타입 참조로 호출할 수 있다.
- 두 호출 모두 Shape의 getArea()가 실행된다는 설명은 정적 바인딩을 가정한 것으로, 재정의된 메서드는 실제 객체의 것이 실행된다.
- 상속받기 때문에 각 하위 클래스의 getArea()가 실행되지 않는다는 설명은 재정의 메서드가 상위 메서드를 대체한다는 점과 반대이다.
오류나 개정된 내용이 보이면 알려주세요
