본문 바로가기
프로그래밍언어/Java

[Java] : 상속을 제한하는 private

by 오주현 2022. 1. 17.
반응형

private

부모 클래스의 필드와 메서드는 서브 클래스에 상속되지만 상속을 원하지 않는 경우에는 private 접근 제한자를 사용해 주면 된다.

private로 지정된 필드나 메서드는 자식 클래스로 상속되지 않게 된다.

예시 코드

class RcCarSetting {
    private String color;
    int speed;
}

RcSetting에 color을 private 접근 제한자로 지정하고, speed는 따로 지정을 하지 않았다.

class RcSedan extends RcCarSetting {
    void setSpeed(int speed) {
        this.speed = speed;
    }

    //오류 코드
    void setColor(String color) {
        this.color = color;
    }
}

RcSedan에서 RcCarSetting를 상속받고 color과 speed의 메서드를 만들어 줬다.

public class RcCar {
    public static void main(String[] args) {
        RcSedan rcSedan = new RcSedan();

        rcSedan.setColor("Red");
        rcSedan.setSpeed(300);
        System.out.println("RcSedan의 속도 => " + rcSedan.speed);
    }
}

color과 speed를 set 메서드를 통해 파라미터 값을 넣어주면

오류가 난다.

오류를 보면 color이 private로 되어 있다고 나온다.

class RcSedan extends RcCarSetting {
    void setSpeed(int speed) {
        this.speed = speed;
    }

    //오류 코드
/*    void setColor(String color) {
        this.color = color;
    }*/
}

RcSedan 클래스에서 color set 메서드 부분을 주석으로 바꿔두고

public class RcCar {
    public static void main(String[] args) {
        RcSedan rcSedan = new RcSedan();

       // rcSedan.setColor("Red");
        rcSedan.setSpeed(300);
        System.out.println("RcSedan의 속도 => " + rcSedan.speed);
    }
}

RcCar 클래스에서 setColor 부분도 주석으로 바꿔주고 실행을 해보면

이제 오류 없이 정상 출력이 된다.

private 접근 제한자를 지정해 주면 이처럼 상속이 안 되는 것을 확인할 수 있다.

반응형

댓글