접근제한자
접근 제한자는 pulbic, procted, default, private와 같이 네 가지 종류가 있다. 이중에서 protected는 상속과 관련이 있다.
- public < protected < default < private 접근 제한이 강화
접근 제한 |
적용할 내용 |
접근할 수 없는 클래스 |
public |
클래스, 필드, 생성자, 메소드 |
없음 |
protected |
필드, 생성자, 메소드 |
자식 클래스가 아닌 다른 패키지에 소속된 클래스 |
defalut |
클래스, 필드, 생성자, 메소드 |
다른 패키지에 소속된 클래스 |
private |
필드, 생성자, 메소드 |
모든 외부 클래스 |
protected는 public과 default 접근 제한의 중간쯤에 해당한다. 같은 패키지에서는 default와 같이 접근 제한이 없지만 다른 패키지에서는 자식 클래스만 접근을 허용한다.
protected는 필드와 생성자, 메소드 선언에 사용될 수 있다. 다음 A 클래스를 보면 protected로 선언된 필드, 생성자, 메소드가 있다.
package package1; public class A { protected String field; protected A() { } protected void method() { } } | cs |
package package1; public class B { public void method() { A a = new A(); a.field = "value"; a.method(); } } | cs |
B 클래스는 A 클래스와 동일한 패키지에 있다. default 접근 제한과 마찬가지로 B 클래스의 필드, 생성자와 메소드에서는 A 클래스의 protected 필드, 생성자, 메소드에 얼마든지 접근이 가능하다.
다음 패키지2에 C 클래스를 만들어서 패키지1에 있는 A클래스를 임포트 시켜보자
package package2; import package1.A; public class C { public void method() { A a = new A(); // 불가 a.field = "value"; // 불가 a.method(); // 불가 } } | cs |
C 클래스는 A 클래스와 다른 패키지에 있다. default 접근 제한과 마찬가지로 C 클래스의 생성자와 메소드에서는 A 클래스의 protected 필드, 생성자, 메소드에 접근할 수 없다.
package package2; import package1.A; public class D extends A { public D() { super(); this.field = "value"; this.method(); } } | cs |
D 클래스는 A 클래스와 다른 패키지에 있다. C클래스와는 달리 D는 A의 자식 클래스이다. 그렇게 때문에 A 클래스의 protected 필드, 생성자, 메소드에 접근이 가능하다. 단 new 연산자를 사용해서 생성자를 직접 호출할 수는 없고, 자식 생성자에서 super()로 A생성자를 호출할 수 있다.
신용권, 『이것이 자바다』, 한빛미디어
'Language > Java' 카테고리의 다른 글
[Java] Scanner 클래스 사용법과 next(), nextLine()메소드의 차이, nextInt() 다음 nextLine()메소드 실행 시 논리적 오류 이유 (4) | 2018.07.01 |
---|---|
[Java] 컬렉션 프레임워크(Collection Framework) List, Set, Map 각각의 특징을 알아보고 대표적인 구현클래스 사용해보기 (0) | 2018.06.26 |
[Java] 패키지 정의와 선언 import문을 활용한 패키지 사용 방법 (0) | 2018.06.26 |
[Java] 다양한 예외처리 방법과 예외 정보 얻기, 다중 예외처리의 방법과 주의사항 (0) | 2018.06.25 |
[Java] 예외의 정의와 종류, 실행 예외(RuntimeException) 알아보기 (3) | 2018.06.25 |