Coding/JAVA

[JAVA]상속과 메서드 오버라이딩(@override)

민톨이 2024. 9. 3. 15:30
728x90

📋 Overloading이란?

- 메서드 이름은 같고 파라미터가 다른 메서드를 여러개 정의하는 것(같은 이름의 메서드를 여러개 정의)

 

📋 Method Overriding이란?

- 부모에게서 상속 받은 기능을 자식이 재정의 하는 것

 

Car.java

package extends1.overriding;

public class Car {

    public void move(){
        System.out.println("차를 이동합니다.");
    }

    //추가 - 자식들은 모두 이 기능을 물려받게 된다.(상속)
    public void openDoor() {
        System.out.println("문을 엽니다.");
    }
}

 

Car는 부모 클래스이다.

여기서 move()라는 메서드를 정의하고 ElectricCar 자식 클래스가 상속받는다.

 

ElectricCar.java

package extends1.overriding;

public class ElectricCar extends Car {

    @Override //부모의 기능을 새로 재정의
    public void move() {
        System.out.println("전기차를 빠르게 이동합니다."); //부모에서 가져온거 수정
    }

    //상속해서 Car의 move()를 물려받음

    public void charge() {
        System.out.println("충전합니다.");
    }
}

 

(extends는 상속을 받는다는 의미)

 

그러나 상속을 유지하면서 move()의 기능을 변경하고 싶다면 어떻게 하는가?

move()를 재정의하면 된다. 

 

move()의 기능을 변경하고 위에 애너테이션(주석)을 달아주면 된다.

@Override 이런 것을 애노테이션이라고 한다.

 

@Override란?

- 상위 클래스의 메서드를 오버라이드하는 것을 나타냄

- 오버라이딩한 메서드 위에 이 메서드를 붙임

- 필수는 아니지만 코드의 명확성을 위해 붙여주는 것이 좋다

 

그러고 출력을 해보면 같은 move()메서드여도 부모와 자식 클래스간 다른 내용이 출력되는 것을 확인할 수 있다.

 

결론:

자식클래스에서 메서드 오버라이딩을 하면 부모클래스의 메서드가 아닌 자식 클래스에서의 메서드 기능을 실행한다.

'Coding > JAVA' 카테고리의 다른 글

[JAVA]StringBuilder  (0) 2024.09.18
[JAVA]OCP(Open-Close Principle) 원칙  (0) 2024.09.07
[JAVA] 클래스/메서드 호출 코드 리팩토링  (0) 2024.08.23
[JAVA]NullPointerException  (0) 2024.08.23
[JAVA] 기본형과 참조형 - 변수 대입  (0) 2024.08.22