본문 바로가기

Java 기본 문법 - 참조 서적 [이것이 자바다 - 한빛미디어]/5. 상속, 다형성

3. Java 자바 - protected 접근 제한자

protected 접근 제한자

(상속과 관련이 있다.)

 

protected 는 public 과 default 접근 제한의 중간쯤에 해당된다.

 

같은 패키지에서는 default 와 같이 접근 제한이 없지만,

다른 패키지에서는 자식 클래스만 접근을 허용한다.

 

protected 멤버는 다른 패키지의 자식도 접근 허용한다.

 

protected 는 필드, 생성자, 메소드 선언에 사용될 수 있다.

 

ex) A.java

package package1;

public class A {
    //필드
    protected String field;
    
    //생성자
    protected A() {
    }
    
    //메소드
    protected void method() {
    }
}    

 

ex) B 클래스는 A 클래스와 동일한 패키지에 있다.

default 접근 제한과 마찬가지로 B 클래스의 생성자와 메소드에는

A 클래스의 protected 필드, 생성자, 메소드 접근이 가능하다.

 

B.java

package package1;   // A 클래스와 같은 패키지

public class B {
    
    // 메소드
    public void method() {
        A a = new A();       // 생성자 접근 가능
        a.field = "value";   // 필드 접근 가능
        a.method();          // 메소드 접근 가능
    }
}    

 

ex) A 클래스와 다른 패키지의 C 클래스는 default 접근 제한과 마찬가지로 

A클래스의 protected 필드, 생성자, 메소드에 접근할 수 없다.

 

C.java

package package2;

import package1.A; //import A

public class C {
    public void method() {
        A a = new A();        // X 접근 불가
        a.field = "value";    // X 접근 불가
        a.method();           // X 접근 불가
    }
}

 

ex) 

D.java

package pakcage2;

import package1.A;   // import A

public class D extends A {
    public D() {
        super();               // 접근 가능
        this.field = "value";  // 접근 가능
        this.method();         // 접근 가능
    }
}

 

D 클래스 : A 클래스와 다른 패키지, A의 자식 클래스

따라서 A 클래스의 protected 필드, 생성자, 메소드에 접근이 가능하다.

 

단, new 연산자를 사용해서 생성자를 직접 호출할 수 없고,

자식 생성자에서 super( ) 로 A 생성자를 호출할 수 있다. (명시해야 한다)