본문 바로가기
캠퍼스/Java

39.동적 바인딩 (1)

by Sylar 2022. 8. 4.

 

-동적 바인딩

 


부모와 자식이 같은 메서드를 들고있으면 부모의 메서드를 무효화 시킴 (overriding)


 

상속의 개념

상속의 개념을 잠시 살펴보면 위의 사진과 같은 방식이다.

 

지구인을 호출하면 지구인 값만, 아시아인을 호출하면 아시아인과 지구인의 값이 heap에 뜬다.

 

 

전 포스팅에 한국인의 값을 못찾은 이유는 아시아인을 호출한 경우 한국인의 값은 heap에 안떠서 못찾은거다

 

만약 지구인과 아시아인, 한국인이 모두 같은 값을 가지고 있고, 한국인을 호출한다면 heap에 모든 값이 생성된다.

 

만약 한국인을 호출하여 출력한다면?

 

 

 

사진이 잘못되었다. 한국인 a = new  한국인();이다.

 

지구인과 아시아인의 값이 무효화 되고 한국인 값만 뜨게된다.

 

즉, a.hello();를 부를수 있지만 그 위에 메서드는 무효화됨.

한국인 메서드를 불러온다는 이야기 ( 자식의 메서드에 접근할 수 있음 )

 

이클립스로 재대로 확인해보자.

 

 

Dog 라는 클래스에 Animal이라는 부모태그를 지정했다.

 

둘은 같은 int타입의 같은 변수명을 가지고 있고 내부의 값만 다르다.

 

 

 

부모클래스가 가지고 있던 int num = 10;의 값은 무효화 되고

 

자식클래스가 가지고 있던 값이 출력된 모습이다.

 

 

 

 

자식태그를 주석처리 한다면

 

 

부모태그의 값이 출력된다.

 

 

맨위의 사진이 잘못된 이유가 여기서 나온다.

 

heap에 Animal과 Dog는 분명히 떴지만, Animal의 값을 가져온 모습.

 

지구인 a =new 한국인(); 으로 하면 한국인 값이 아닌 지구인 값을 가르킨다.

Animal d1 = new Dog(); = > heap에는 Dog까지 뜨지만 Animal을 타입으로 받아서 Dog의 num2값을 읽을 수 없음

 

그래서 오류남.

 

 

 

부모 클래스에는 값이 있고 자식 클래스에 값이 없으면 부모클래스의 값이 출력되는가?

 

 

네 그렇습니다

'캠퍼스 > Java' 카테고리의 다른 글

41. 동적 바인딩 (3)  (0) 2022.08.04
40. 동적 바인딩 (2)  (0) 2022.08.04
38.상속  (0) 2022.08.03
37. 오버로딩  (0) 2022.08.02
36. 생성자  (0) 2022.08.02