⭐️ 상속과 메모리 구조
ElectricCar electricCar = new ElectricCar();
- new ElectricCar() 를 호출하면 ElectricCar 뿐만 아니라 상속 관계에 있는 Car까지 포함하여 인스턴스를 생성한다.
- 참조값은 하나지만, 실제로 그 안에서는 Car, ElectricCar 라는 두가지 클래스 정보가 공존하는 것이다.
- 상속이라고 해서 단순하게 부모의 필드와 메서드만 물려 받는게 아니다.
- 상속 관계를 사용하면 부모 클래스도 함께 포함해서 생성된다. 외부에서 볼때는 하나의 인스턴스를 생성하는 것 같지만 내부에서는 부모와 자식이 모두 생성되고 공간도 구분된다.
electricCar.charge();
- electricCar.charge()를 호출하면 참조값을 확인해서 호출한다.
- 그런데 상속 관계의 경우에는 하나의 참조값 내부에 부모와 자식이 모두 존재한다.
- 이때 Car의 charge()인지, ElectricCar의 charge()인지 선택해야한다.
- 이런 경우 호출하는 변수의 타입(클래스)를 기준으로 선택한다. eletricCar의 변수 타입이 ElectricCar이므로 인스턴스 내부에 같은 타입인 charge()를 호출한다.
electricCar.move();
- 그런데 ElectricCar에는 move() 메서드가 없다. 상속 관계에서는 자식 타입에 해당 기능이 없으면 부모 타입으로 올라가서 찾는다. 이경우 부모인 Car에서 move()를 찾고, 부모에 있는 move() 메서드를 호출한다.
- 기능을 찾지 못하면 컴파일 오류가 발생한다.