책 내용 질문하기
3권 2021년 2회 19번 문제 질문드립니다.
도서
2022 시나공 정보처리기사 실기
페이지
3,41
조회수
230
작성일
2022-07-22
작성자
탈퇴*원
첨부파일

안녕하세요:)

19번 문제 풀이를 보면

 

순번 3번 줄 System.out.println(a1.sun(3,2) + a2.sun(3,2));

실행하면 4번 줄 ovr1 클래스에 있는 sun 메소드가 실행되는 건 이해했습니다.

근데) ovr2가 orv1의 자식 클래스이므로 

똑같은 메소드 sun이 있으면 오버라이딩, 즉 재정의 되어 ovr2의 sun 메서드가 실행되야 하는 거 아닌가요,,? 

a1.sun(3,2) 와 a2.sun(3,2) 모두 ovr2의 sun 메소드가 실행되어 값이 12라고 생각했습니다! 

 

제 생각이 틀린 듯 하여 해답 요청드립니다 ㅠ,ㅠ

답변
2022-07-23 14:28:46

안녕하세요 길벗수험서 운영팀입니다.

 

조금 다르게 생각하셔야 합니다.

 

오버라이딩은 항상 이루어지는 것이 아닙니다.

상위 클래스를 상속받는 하위 클래스 객체를 생성할 때만 오버라이딩이 발생합니다.

 

즉, ovr1의 객체를 생성했다면 ovr2는 전혀 연관되지 않은 순수한 ovr1의 객체이기 때문에 ovr2의 메소드에 의해 오버라이딩 될 일이 없다는 것이죠. 

(예외적으로 ovr1 a1 = new ovr2(); 와 같이 생성자를 바꾸는 경우에는 ovr2의 코드로 재정의(오버로딩)됩니다.)

 

때문에 ovr1의 sun메소드를 수행할 때는 4번으로, ovr2의 sun메소드를 수행할 때는 7번으로 가는 것이 맞습니다.

 

행복한 하루되세요 :)

  • 관리자
    2022-07-23 14:28:46

    안녕하세요 길벗수험서 운영팀입니다.

     

    조금 다르게 생각하셔야 합니다.

     

    오버라이딩은 항상 이루어지는 것이 아닙니다.

    상위 클래스를 상속받는 하위 클래스 객체를 생성할 때만 오버라이딩이 발생합니다.

     

    즉, ovr1의 객체를 생성했다면 ovr2는 전혀 연관되지 않은 순수한 ovr1의 객체이기 때문에 ovr2의 메소드에 의해 오버라이딩 될 일이 없다는 것이죠. 

    (예외적으로 ovr1 a1 = new ovr2(); 와 같이 생성자를 바꾸는 경우에는 ovr2의 코드로 재정의(오버로딩)됩니다.)

     

    때문에 ovr1의 sun메소드를 수행할 때는 4번으로, ovr2의 sun메소드를 수행할 때는 7번으로 가는 것이 맞습니다.

     

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.