Java

[JAVA] protected 접근 제한자

콩스프 2024. 7. 30. 20:24

접근 제한 적용 대상 접근할 수 없는 클래스
public 클래스, 필드, 생성자, 메소드 없음
protected 필드, 생성자, 메소드 자식 클래스가 아닌 다른 패키지에 소속된 클래스
default 클래스, 필드, 생성자, 메소드 다른 패키지에 소속된 클래스
private 필드, 생성자, 메소드 모든 외부 클래스

 

  • public과 default 접근 제한자의 중간쯤에 해당
  • 필드, 생성자, 메소드 선언에 사용될 수 있음
  • 같은 패키지에서는 defualt와 같이 접근 제한이 없지만 다른 패키지에서는 자식 클래스만 접근을 허용함

 

protected 접근제한자 EX)

package package1;

public class A {
	protected String field;
	
	protected A() {
		
	}
	
	protected void method() {
		
	}
}

A 클래스

  • protected로 선언된 필드, 생성자, 메소드

 

package package1;

public class B {
	public void method() {
		A a = new A();		//(o)
		a.field = "value";	//(o)
		a.method();		//(o)
	}
}

B 클래스

  • A 클래스와 동일한 패키지 내에 있음
  • A 클래스의 protected 필드, 생성자, 메소드에 접근 가능

 

 

package package2;

import package1.A;

public class C {
	public void method() {
		A a = new A();		//(x)
		a.field = "value"; 	//(x)
		a.method();		//(x)
	}
}

C 클래스

  • A 클래스와 다른 패캐지에 있음
  • A 클래스의 protected 필드, 생성자, 메소드에 접근할 수 없음

 

package package2;

import package1.A;

public class D extends A {
	public D() {
		super();		//(o)
		this.field = "value";	//(o)
		this.method();		//(o)
	}
}

D 클래스

  • A 클래스와 다른 패키지에 있지만 A 클래스를 상속받음
  • A 클래스의 protected 필드, 생성자, 메소드에 접근 가능
  • 단, new 연산자를 사용해서 생성자를 직접 호출할 수는 없고 자식 생성자에서 super()로 A 생성자를 호출할 수 있음.