상속과 메모리 구조
이전 포스팅의 예제를 참고하자.
2024.07.15 - [Java] - [Java 기본] 상속
ElectricCar는 Car를 상속받았다.
ElectricCar electricCAr = new ElectricCar();
메모리 구조를 살펴보자.
=> ElectricCar는 Car를 상속 받고 있다. new ElectricCar를 통해 객체생성을 하면 상속관계에 있는 Car까지 포함해서 인스턴스를 생성한다. 참조값은 x001로 하나지만 실제로 그 안에서는 Car, ElectricCar 라는 두가지 클래스 정보가 공존하는 것이다.
상속 관계를 사용하면 부모 클래스도 포함해서 생성된다. 외부에서는 하나의 인스턴스를 생성하는 것처럼 보이지만 내부에서는 부모와 자식이 모두 생성되고 공간도 구분된다.
electricCar.charge()를 호출하면 참조값을 확인해서 x001.charge()를 호출한다. 그런데 상속 관계의 경우 내부에 부모와 자식이 모두 존재한다. 이 때 부모인 Car를 통해서 charge()를 찾을지 아니면 ElectricCar를 통해서 charge()를 찾을지 선택해야 한다.
이 때는 호출하는 변수의 타입(클래스)를 기준으로 선택한다. electricCar의 변수 타입이 ElectricCar이므로 인스턴트 내부의 ElectricCar를 통해서 charge()를 호출한다.
electricCar.move()를 호출하면 먼저 x001 참조로 이동한다. 내부에는 Car, ElectricCar 두 가지 타입이 있는데, 이 때 호출하는 변수가 ElectricCar 이므로 ElectricCar 타입을 선택한다. 그런데 Electric Car에는 move() 메서드가 없다. 상속 관계에서는 자식 타입에 해당 기능이 없으면 부모타입으로 올라가서 찾는다. 이 경우 부모인 Car 클래스의 move()를 호출한다.
정리
- 상속 관계의 객체를 생성하면 그 내부에는 부모와 자식이 모두 생성된다.
- 상속 관계의 객체를 호출할 때, 대상 타입을 정해야 한다. 이 때 호출자의 타입을 통해 대상 타입을 찾는다.
- 현재 타입에서 기능을 찾지 못하면 상위 부모 타입으로 기능을 찾아서 실행한다.
* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.
'프로그래밍언어 > Java' 카테고리의 다른 글
[Java 기본] 상속과 메서드 오버라이딩 (0) | 2024.07.15 |
---|---|
[Java 기본] 상속과 기능 추가 (0) | 2024.07.15 |
[Java 기본] 상속 (0) | 2024.07.15 |
[Java 기본] final 변수와 상수 (0) | 2024.07.12 |
[Java 기본] static 메서드 (0) | 2024.07.12 |