2023/JAVA_나도코딩 강의 공부

메소드 오버라이딩

luha oh 2023. 2. 28. 08:59

_13_MethodOverriding ( 메소드 오버라이딩)

메소드 오버라이딩

  • 자식 클래스에서 부모 클래스에 있는 메소드를 덮어쓴다.(재정의)
  • 같은 이름의 메소드임에도 불구하고 객체마다 다른 기능을 하게 된다.

 

 

1. 부모 클래스(Camera)

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 + "의 주요 기능 : 사진 촬영, 동영상 녹화");
    }
}

 

 

 

 

 

2. 자식클래스 ( FactoryCam )

 

package chap_07.camera;

public class FactoryCam extends Camera { // 자식 클래스
    // 공장 카메라
    // 설정 : 화재 감지 기능을 가짐.

    public FactoryCam() {
        this.name="공장 카메라";
    }

    public void detectFire(){
        System.out.println("화재를 감지합니다.");
    }

    @Override
    public void showMainFeature(){
        System.out.println(this.name + "의 주요 기능 : 화재 감지");
        // 메소드 오버라이딩 한 것
        // factoryCam 객체를 통해 showMainFeature()를 호출하면
        // 카메라 클래스(부모 클래스)에 있는 메소드를 덮어써서
        // 사진 촬영, 동영상 녹화(부모 클래스 메소드)가 아니라 화재 감지가 뜸.
        // factoryCam 객체를 통해서는 부모 클래스의 메소드 showMainFeature()를 불러올 수 없다.
        // 메소드를 새롭게 재정의

    }
}

 

 

 

 

3. 자식 클래스( SpeedCam )

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 + "의 주요 기능 : 속도 측정, 번호 인식");
    }
}

 

 

 

4. main

package chap_07;

import chap_07.camera.Camera;
import chap_07.camera.FactoryCam;
import chap_07.camera.SpeedCam;

import java.security.SecurityPermission;

public class _13_MethodOverriding {
    public static void main(String[] args) {
        // 메소드 오버라이딩 : 자식 클래스에서 부모 클래스의 메소드를 덮어쓰기 ( 재정의 )

        Camera camera=new Camera();
        FactoryCam factoryCam=new FactoryCam();
        SpeedCam speedCam=new SpeedCam();

        camera.showMainFeature();
        factoryCam.showMainFeature();
        speedCam.showMainFeature();

        // 메소드 오버라이딩 하면 자식 클래스에서 부모 클래스에 있는 메소드를 덮어써
        // 같은 이름의 메소드임에도 불구하고 객체마다 다른 기능을 하게 된다.
    }
}

 

 

[실행 결과]

 

 

 

Camera, FactoryCam, SpeedCam 세 가지 클래스의 마지막 부분 showMainFeature() 함수에 주목하라.

같은 이름의 함수이지만 자식 클래스인 공장 카메라와 과속단속 카메라에서 메소드오버라이딩하여 새롭게 재정의했다.

 

Camera.class(부모 클래스)

 

 

 

 

FactoryCam.class (자식 클래스)

 

 

 

 

 

 

SpeedCam.class(자식 클래스)

 

'2023 > JAVA_나도코딩 강의 공부' 카테고리의 다른 글

Super  (0) 2023.03.01
다형성  (0) 2023.02.28
상속  (0) 2023.02.28
패키지  (0) 2023.02.28
생성자  (1) 2023.02.27