위로 아래

접근 제한자

특징

  1. 객체지향 4대 개념(추상화, 캡슐화, 상속, 다형성) 중 캡슐화가 포함하고 있는 '은닉화' 개념과 관련있다.
  2. 하나의 .java 파일에는 하나의 public 클래스만 존재할 수 있다. 그리고 public 클래스의 이름이 .java 파일의 이름이 된다.

사용 가능 범위

  1. 클래스 : public, default
  2. 생성자 : public, protected, default, private
  3. 멤버변수 : public, protected, default, private
  4. 멤버 메소드 : public, protected, default, private
  5. 지역 변수 : 접근제한자 사용 불가

접근 지정자 접근 범위 동일 클래스 동일 패키지 다른 패키지의
자식 클래스
다른 패키지
public 접근 제한 없음 O O O O
protected 동일 패키지와
상속받은 클래스 내부
O O O  
default 동일 패키지
내에서만
O O    
private 동일 클래스
내에서만
O      

 

예시

더보기
-----------------------sec 패키지 One.java 파일-------------------------
public class One {
	private int secret = 1;   // 전부 접근 불가
	int roommate = 2;   // default. 동일 패키지까지만 접근 가능
	protected int child = 3;   // 동일 패키지 접근 가능, 다른 패키지의 자식 패키지까지 접근 가능
	public int anybody = 4;   // 전부 접근 가능
}
---------------------sec 패키지 One1.java 파일-----------------------
public class One1 extends One{
	void print() {
		//System.out.println(srcret);
		System.out.println(roommate);
		System.out.println(child);
		System.out.println(anybody);
	}
}
---------------------sec 패키지 Two.java 파일-----------------------
public class Two {
	void print() {
		One o = new One();
		//System.out.println(o.secret)   // 같은 패키지에 잇어도 다른 객체의 private 멤버 접근 불가
		System.out.println(o.roommate);
		System.out.println(o.child);
		System.out.println(o.anybody);
	}
}
---------------------sec.other 패키지 One2.java 파일-----------------------
import sec.One;

public class One2 extends One{
	void print() {
		//System.out.println(secret);   //private는 접근 불가
		//System.out.println(roommate);   // 자식 클래스라도 부모와 다른 패키지에 있으면 default에 접근 불가
		System.out.println(child);
		System.out.println(anybody);
	}
}
---------------------sec.other 패키지 Three.java 파일-----------------------
import sec.One;

public class Three {
	void print(){
		One o = new One();
		//System.out.println(o.secret);   //private는 접근 불가
		//System.out.println(o.roommate);   // 자식 클래스라도 부모와 다른 패키지에 있으면 default에 접근 불가
		//System.out.println(o.child);   // 다른 패키지의 다른 클래스는 접근 불가
		System.out.println(o.anybody);
	}
}