자바 상속

장원재·2025년 1월 14일
0

java

목록 보기
19/19

상속은 기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용하게 해준다. 이름 그대로 기존 클래스의 속성과 기능을 그대로 물려받은 것이다. 이때 extends 키워드를 사용하면 되고, extends 대상은 하나만 선택할 수 있다. 아래의 예제를 살펴보자.

public class Car {
    public void move() {
        System.out.println("차가 이동합니다.");
    }
}
  • 부모가 되는 클래스로 이 Car 이라는 클래스를 상속받은 자식 클래스들은 move 메서드에 접근할 수 있다.
public class ElectricCar extends Car{
    public void charge() {
        System.out.println("충전합니다.");
    }
}
  • ElectricCar 클래스는 Car 을 상속받았으므로 Car 의 기능인 move 를 사용할 수 있다.

상속과 메모리 구조

메인 클래스에서 아래 코드를 실행했을 때 메모리 구조를 살펴보자.

ElectricCar electricCar = new ElectricCar();


new ElectricCar() 을 호출하면 상속 관계에 있는 Car 까지 포함해서 인스턴스를 생성한다.

electricCar.move() 을 호출하면 먼저 본인 타입에서 move() 메서드가 있는지 확인한다. 만약에 존재하지 않는다면 상위 부모에서 필요한 기능을 찾아본다. 참고로 상위 부모로 계속 올라갔음에도 불구하고 기능이 없다면 컴파일 오류가 발생한다.

오버라이딩

오버라이딩은 하위 클래스에서 상위 클래스의 메서드를 재정의하는 과정을 의미한다. 이는 "electricCar.move() 을 호출하면 먼저 본인 타입에서 move() 메서드가 있는지 확인" 한다의 원리가 그대로 적용된다. 아래 예제를 살펴보자.

public class Car {
    public void move() {
        System.out.println("차를 이동합니다.");
    }
    public void openDoor() {
        System.out.println("문을 엽니다.");
    }    
}
  • 부모 클래스
public class ElectricCar extends Car {

    @Override
    public void move() {
        System.out.println("전기차를 빠르게 이동합니다.");
    }
}
  • 부모 클래스의 move 메서드를 재정의, 즉 오버라이딩 했다.

    오버라이딩했을때 메모리 구조는 위와 같다. 상속했을 때와 동일하게 인스턴스가 생성되고, 사용하고자 하는 기능을 우선 본인 타입에서 찾는다. 따라서 electricCar.move() 를 실행했을 때 Carmove() 가 아닌 ElectricCarmove() 가 우선 실행된다.
profile
데이터 분석에 관심있는 백앤드 개발자 지망생입니다

0개의 댓글

관련 채용 정보