재정의 오버라이딩 Overriding

Kyu·2021년 1월 18일
0

Java 공부기록

목록 보기
15/40

재정의(Override)

  • 상속관계에서 상속받은 하위 클래스가 상위 클래스의 동작을 수정하는 것
  • Override (재정의 = 부모 메서드 무시)
  • 메모리에 부모와 자식 메서드가 공존하지만 결국에는 자식 메서드가 실행된다

Child 를 두 타입으로 불러 올수있다.

1번

Dog d = new Dog();
d.eat();
2번

Animal d = new Dog();
d.eat();

2번으로 불렀을때가 특히 중요하다.
Upcasting 이라고 한다.

d.eat(); 을 했을 때, 원래라면 Parent인 Animal의 eat메서드를 부른다.
하지만 Child인 Dog의 eat이 재정의 되었을 경우에 Dog의 eat을 부른다.

다시 말해서 컴파일 시점에서는 Parent의 eat이다. 하지만 실행을 하면,
동적 바인딩이 일어나서 Child의 재정의한 곳으로 찾아가기 때문에 Child의 메서드가 실행된다.

재정의(Overriding)은 동적 바인딩(호출될 메서드가 실행시점에서 결정되는 바인딩)
프로그램의 속도가 떨어지는 원인이 되지만 이점이 더 많기때문에 사용 한다.

Overloading 은 정적 바인딩이라 실행 속도와는 관계가 없지만 Override는 실행을 한 다음에 실행한 메서드를 찾아가기때문에 속도가 떨어지는 원인이 된다.

profile
TIL 남기는 공간입니다

0개의 댓글