Post

java modifiers - protected, default

protected와 default 기준

  • 상속구조에서 자식클래스 인가? protected
  • 같은 패키지 내인가? default
    • 자식 패키지 안됨. 오직 같은 패키지 siblings class 여야함.

test

  • (아래) 구조

  • mypackage.Test 객체를 만들어놈.
  • Test객체를 갖다쓰는 client 들의 package 위치에 따라 사용 가능 여부를 따짐.
    • 외부 패키지 (otherpackage.client)
    • 같은 패키지이나 하위 패키지 (childpackage.Client)
    • 같은 패키지 (mypackage.client)


  • 외부 패키지다? 상속받았을때만 protected 가능
    • 외부 패키지니까 default는 쓸 수 없음.
  • 같은 패키지이나 하위 패키지
    • (아래) protected 있는 패키지의 하위 패키지라도 defaultprotected는 쑬 수 없음.
  • 같은 패키지
    • (아래) 같은 패키지 내라면 당연히 protected, default 상관없이 참조가능함

정리

  • default : 오직 같은 패키지 안 에서만 쓸 수 있음 (하위 패키지 안됨)
  • protected : 패키지 경로 다르다면, 상속 받아야만 쓸 수 있음.
  • 같은 패키지라면 defaultprotected상관없이 쓸 수 있음.
This post is licensed under CC BY 4.0 by the author.