TIL 2023-10-19 Java 상속과 오버라이딩 Overriding

장규빈·2023년 10월 19일

TIL

목록 보기
6/59
post-thumbnail

상속

자바에서 상속이란 부모 클래스의 필드와 메서드를 자식 클래스에게 공유하는걸 말한다.
상속을 사용하면 적은 양의 코드로 새로운 클래스를 작성할 수도 있고 공통적인 코드를 관리하여 코드의 추가와 변경이 쉬워질 수도 있다. 클래스 간의 상속을 할때는 extend를 사용한다.

ex 부모 클래스

public class Car {

    String company; // 자동차 회사
    private String model; // 자동차 모델
    private String color; // 자동차 색상
    private double price; // 자동차 가격

    double speed;  // 자동차 속도 , km/h
    char gear = 'P'; // 기어의 상태, P,R,N,D
    boolean lights; // 자동차 조명의 상태

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public double gasPedal(double kmh, char type) {
        changeGear(type);
        speed = kmh;
        return speed;
    }

    public double brakePedal() {
        speed = 0;
        return speed;
    }

    public char changeGear(char type) {
        gear = type;
        return gear;
    }

    public boolean onOffLights() {
        lights = !lights;
        return lights;
    }

    public void horn() {
        System.out.println("빵빵");
    }

}

ex 상속받은 자식 클래스

public class SportsCar extends Car{
    String engine;
    public void booster() {
        System.out.println("엔진 " + engine + " 부앙~\n");
    }
}
  • 자바에서는 클래스의 다중상속을 허용하지 않는다!
  • 클래스에 final 키워드를 지정하여 상속할 수 없는 클래스가 된다!

오버라이딩

부모 클래스로부터 상속받은 메서드의 내용을 재정의 하는 것을 오버라이딩이라고 한다.
버라이딩을 하기 위해서는 아래 조건들을 만족해야 한다.
@Override를 사용해 메서드를 재정의 한다.

  • 선언부가 부모 클래스의 메서드와 일치
  • 접근 제어자를 부모 클래스의 메서드 보다 좁은 범위로 변경할 수 없다.
  • 예외는 부모 클래스의 메서드 보다 많이 선언할 수 없다.

ex 부모 클래스

public class Car {

    String company; // 자동차 회사
    private String model; // 자동차 모델
    private String color; // 자동차 색상
    private double price; // 자동차 가격

    double speed;  // 자동차 속도 , km/h
    char gear = 'P'; // 기어의 상태, P,R,N,D
    boolean lights; // 자동차 조명의 상태

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public double gasPedal(double kmh, char type) {
        changeGear(type);
        speed = kmh;
        return speed;
    }

    public double brakePedal() {
        speed = 0;
        return speed;
    }

    public char changeGear(char type) {
        gear = type;
        return gear;
    }

    public boolean onOffLights() {
        lights = !lights;
        return lights;
    }

    public void horn() {
        System.out.println("빵빵");
    }

}

ex 상속받은 자식(오버라이딩)

public class SportsCar extends Car{
    String engine;
    public void booster() {
        System.out.println("엔진 " + engine + " 부앙~\n");
    }

    public SportsCar(String engine) {
        this.engine = engine;
    }

    @Override
    public double brakePedal() {
        speed = 100;
        System.out.println("스포츠카에 브레이크란 없다");
        return speed;
    }

    @Override
    public void horn() {
        booster();
    }
}
profile
나다운사람

0개의 댓글