본문 바로가기

Backend/Java

[Java] 접근 제한자

public

- 모든 접근을 허용

- 어떠한 클래스가 접근하더라도 모두 허용

- 다른 패키지에서도 접근 가능

 

protected

- 상속받은 클래스 또는 같은 패키지에서 접근 가능

- 해당 클래스를 상속하는 자식 클래에서 접근 가능

- 같은 패키지 내부에 있는 클래스, 하위 클래스(상속받은 경우)에서 접근 가능

 

default

- 기본 제한자

- 자신 클래스 내부와 같은 패키지 내에서만 접근 가능

- 접근 제한자를 명시하지 않음

 

private

- 외부에서 접근 불가

- 같은 클래스 내에서만 접근 가능

 

  접근범위 동일
클래스
동일
패키지
다른패키지의 동일 클래스 다른
패키지
적용 대상 접근 가능 대상 접근 불가 대상
public 접근제한없음 O O O O 클래스, 필드, 생성자, 메소드 모든 대상 없음
protected 동일패키지와 상속받은 클래스 내부 O O O X 필드, 생성자, 메소드 같은 패키지 또는 자식 클래스 자식 클래스가 아닌 다른 패키지에 소속된 클래스
default 동일패키지 내에서만 O O X X 클래스, 필드, 생성자, 메소드 같은 패키지에 소속된 클래스 다른 패키지에 소속된 클래스
private 동일클래스 내에서만 O X X X 필드, 생성자, 메소드 클래스 내부 클래스 외부

 

public class 클래스{...} // public 접근 제한
class 클래스{...} // default 접근 제한

 

상속과 접근 지정자

- public, protected, 디폴트, private

 

슈퍼 클래스의 private 멤버

- 다른 모든 클래스에 접근 불허

- 클래스내의 멤버들에게만 접근 허용

 

슈퍼 클래스의 디폴트 멤버

- 패키지 내 모든 클래스에 접근 허용

 

슈퍼 클래스의 public 멤버

- 다른 모든 클래스에 접근 허용

 

슈퍼 클래스의 protected 멤버

- 같은 패키지 내의 모든 클래스 접근 허용

- 다른 패키지에 있어도 서브 클래스는 슈퍼 클래스의 protected 멤버 접근 가능