객체 지향 프로그래밍 - 상속

protected 접근 제한자

한모로그 2023. 1. 18. 21:00

protected 접근 제한자

  • protected는 상속과 관련이 있고, public과 default의 중간쯤에 해당하는 접근 제한
  • protected는 같은 패키지에서는 default처럼 접근이 가능하나, 다른 패키지에서는 자식 클래스만 접근을 허용


    출처, 이것이 자바다


package ch07.sec06.package1;

//접근제한자 범위 private < [default] < protected < public
//protected (상속)접근제한자 : 동일한 패키지안에는 public으로 참조가능하다.
//동일한 패키지에서는 public으로 참조가능하다. 다른 패키지는 private 참조 불가능
public class A {
    //필드 선언
    protected String field;

    //생성자 선언
    protected A() {
    }

    //메소드 선언
    protected void method() {
    }
}

package ch07.sec06.package1;
//A클래스와 동일한 패키지
public class B {

    //메소드 선언
    public void method() {
        A a = new A();
        a.field = "value";
        a.method();
    }
}

package ch07.sec06.package2;
//A클래스와 다른 패키지
import ch07.sec06.package1.A;

public class C {
    //메소드 선언
    public void method() {

        //protected다른 패키지이므로 private반응 참조불가능
        /*
        A a = new A();
        a.field = "value";
        a.method();
        */
    }
}

package ch07.sec06.package2;

import ch07.sec06.package1.A;

//A클래스와 다른 패키지
//상속관계
public class D extends A {
    //생성자 선언
    public D() {
        super();
    }

    //메소드 선언
    public void method1() {
        //상속관계가 적용되어 사용
        //A클래스의 필드값 변경
        this.field = "value";
        //A클래스의 메소드 호출
        this.method();
    }
    //메소드 선언
    public void method2() {
        /*
         * 상속관계 성격이 아니라 직접 객체생성은 private 반응으로 참조불가능
        A a = new A();
        a.field = "value";
        a.method();
        */
    }
}