언어/java

[JAVA/자바] 메소드 오버라이딩

STUFIT 2023. 4. 2. 18:51
반응형

오버라이딩?

 부모 클래스로부터 상속을 받은 메소드들을 자식 클래스에서 재정의해서 새롭게 사용하는 것이다.

메소드 오버로딩하고 비슷한 개념일 수 있지만, 메소드 오버로딩은 같은 메소드라 할지라도 받는 변수나 형식이 달라지게 되면 해당 메소드로 가는 형식을 뜻하지만, 메소드 오버라이딩은 부모쪽에서 생성한 메소드를 다른 자식 클래스에서 새롭게 메소드를 정의해서 사용하므로 약간의 차이점이 있다.

코드를 통해 비교하자면

// 부모 클래스

package chap_07.camera;

public class Camera { // 부모 클래스
    public String name;

    // 생성자
    public Camera() {
        this.name = "카메라";
    }

    public void takePicture(){
        // 사진촬영
        System.out.println(this.name+" : 사진을 촬영합니다.");
    }
    public void recordVideo(){
        // 동영상 녹화
        System.out.println(this.name+" : 동영상을 녹화합니다.");
    }

    public void showMainFeature(){
        System.out.println(this.name+ ": 의 주요 기능 : 사진촬영, 동영상 녹화");
    }

}


// 자식 클래스 1
package chap_07.camera;

public class FactoryCam extends Camera { // 자식 클래스
    public FactoryCam() {
        this.name = "공장 카메라";
    }

    public void detectFire(){
        // 화제 감지
        System.out.println("화제를 감지합니다.");
    }
    public void showMainFeature(){
        System.out.println(this.name+ ": 의 주요 기능 : 화제 감지");
    }

}


// 자식 클래스 2
package chap_07.camera;

public class SpeedCam extends Camera{ // 자식 클래스
    public SpeedCam() {
        this.name = "과속단속카메라";
    }
    public void checkSpeed(){
        // 속도 체크
        System.out.println("속도를 측정합니다.");
    }
    public void recognizeLicensePlate(){
        // 번호 인식
        System.out.println("차량 번호를 인식합니다.");
    }

    @Override // annotation => 현재 메소드는 부모클래스의 메소드가 오버라이딩 되고 있는걸 알려주고 있음.
    public void showMainFeature(){
        System.out.println(this.name+ " 의 주요 기능 : 속도측정, 번호인식");
    }
}

 

위의 코드에서 부모 클래스에서 showMainFeature 메소드를 등록하였는데, 자식 클래스들에서는 sout 에서 본인들이 메소드를 재정의 함의로써, 새로운 메소드 형식으로 나타내고 있다.

또한, 마지막 자식 클래스2 에서 @Override 는 부모 클래스에서 메소드를 오버라이딩 했다는 의미이 데코레이터로서 없어도 되지만 있으면 보기 편하므로 넣어준다.

반응형