자바 공부/[ 完 ] 자바 실전 - 기본편
9-1 상속
잘데친갈비
2024. 3. 14. 18:09
상속 - 시작
- 공통되는 것을 묶어 부모를 만들고 그 하위에 공통 사항을 각각사용하며 다른 기능을 만드는 것을 제공 하기 위해 상속을 사용한다.
상속 관계
- 상속은 객체 지향 프로그래밍의 핵심 요소 중 하나로 기존 클래스의 필드와 메서드를 새로운 클래스에 재사용하게 해준다.
- 이름 그대로 기존 클래스의 모든것을 그대로 물려받는 것이다.
- 사용하는 방법은 extend 키워드를 사용하면 된다.
- 자식 클래스는 부모클래스를 하나만 상속 받을 수 있다.
상속 관계
- 부모 클래스 (슈퍼 클래스) : 상속을 통해 자신의 필드와 메서드를 다른 클래스에 제공하는 클래스
- 자식 클래스 (서브 클래스) : 부모 클래스로부터 필드와 메서드를 상속받는 클래스
상속 사용
- 자동차 속성을 갖는 부모 클래스 🔽
package extends1.ex2;
public class Car {
public void move() {
System.out.println("차를 이동합니다");
}
}
- 부모 클래스로부터 상속 받는 전기차 클래스 🔽
package extends1.ex2;
public class ElectricCar extends Car{
public void charge() {
System.out.println("충전 합니다.");
}
}
- 부모 클래스로부터 상속 받는 가솔린차 클래스 🔽
package extends1.ex2;
public class GasCar extends Car{
public void fillUp(){
System.out.println("기름을 주유 합니다.");
}
}
- 전기 차 가스 차 의 기능을 구현하는 클래스
package extends1.ex2;
public class CarMain {
public static void main(String[] args) {
ElectricCar electricCar = new ElectricCar();
electricCar.move();
electricCar.charge();
GasCar gasCar = new GasCar();
gasCar.move();
gasCar.fillUp();
}
}
→ 전기 차 와 가스 차 에 move 메소드가 없지만 상속받으면 마치 자식의 메소드인것 처럼 사용 가능해진다.
상속과 메모리 구조
→ 다음과 같은 상속 구조도를 갖은 class 를 보자🔽
ElectricCar electricCar = new ElectricCar();
→ ElectritcCar 의 객체를 생성할때의 메모리 구조 상황을 보면 🔽
- 객체를 생성 할 때에 상속 받은 부모의 기능도 ElectricCar 의 참조 값 안에 생성하게 된다.
- 외부에서 볼때 하나의 인스턴스를 생성 하는거 같지만 내부에는 부모와 자식이 모두 생성 되고 공간이 구분 된다.
- 실제로는 참조 값 안에 Car(부모), ElectricCar(자식) 이라는 두 가지 클래스 정보가 공존하게 된다.
→ 그럼 ElectricCar.charge() 를 호출 한 상황에서는
- 본인의 타입에서 찾아보고 해당 기능이나 변수가 존재하면 바로 사용.
→ ElectircCar.move() 인 부모 기능을 호출
- 우선 본인의 타입에 존재하는지 찾아보고 없으면 부모타입에서 찾아 기능을 꺼내 사용한다.
- 상속 결론
- 상속 받은 객체를 생성하면 그 내부에는 부모와 자식이 모두 생성 된다.
- 상속 관계의 객체를 호출 할 때, 대상 타입을 정하고 이때 호출자의 타입을 통해 찾는다.
- 현재 타입에서 기능을 찾지 못하면 상위 부모 타입의 기능을 찾아서 실행 한다.