1) 종류: private, (default), protected, public
2) 기능 : 멤버 변수, 멤버메소드에 대한 접근 권한을 제한
3) private: '자기자신'이 선언된 클래스에서만 사용 가능
4) (default): '자기자신' + '같은 패키지'에 있는 클래스들에서는 사용 가능
5) protected: '자기자신' + '같은 패키지' + '상속받은 클래스' 에서 사용 가능
-> 다른 패키지의 클래스라도 '상속 받으면' 사용 가능하다
6) public: 어디서든 사용이 가능
사용범위: private < (default) < protected < public
※ 클래스에 붙는 접근제한자는 딱 두가지 입니다
: (default) , public
package com.lec.java.access01;
import com.lec.java.access02.Test02;
public class Access01Main {
public static void main(String[] args) {
System.out.println("접근권한 수식어(Access Modifier)");
Test01 t1 = new Test01();
// t1.privateNum = 10; // not visible (볼 수 없다)
t1.defaultNum = 20;
t1.protectedNum = 30;
t1.publicNum = 40;
// t1.aaa = 50; // cannot be resolved (이런 이름이 없다)
// 다른 패키지(com.lec.java.access02)에 있는 클래스
// 일단 다른 패키지 라면 import 부터 선행되어야 한다 // ctrl + shift + o
Test02 t2 = new Test02();
// t2.privateNum = 10;
// t2.defaultNum = 20;
// t2.protectedNum = 40;
t2.publicNum = 50;
// import 없이 full name 으로 사용 가능.
com.lec.java.access02.Test3 t3 = new com.lec.java.access02.Test3();
} // end main()
} // end class Access01Main
package com.lec.java.access01;
public class Test01 {
private int privateNum;
int defaultNum;
protected int protectedNum;
public int publicNum;
}
package com.lec.java.access02;
public class Test02 {
private int privateNum;
int defaultNum;
protected int protectedNum;
public int publicNum;
}
package com.lec.java.access02;
public class Test3 {
private int privateNum;
int defaultNum;
protected int protectedNum;
public int publicNum;
}
- public class: 어디에서나 인스턴스 생성이 가능한 클래스
(주의) public 클래스의 이름은 .java 파일 이름과 반드시 같아야 함- (default) class: 같은 패키지에 있는 클래스들에서만 인스턴스 생성이 가능
package com.lec.java.access03;
import com.lec.java.access04.TestPublic2;
//import com.lec.java.access04.MyDefault; // 애시당초 import 부터 불가!
// 클래스의 접근 권한 수식어: public, (default)
// 1. public class: 어디에서나 인스턴스 생성이 가능한 클래스
// (주의) public 클래스의 이름은 .java 파일 이름과 반드시 같아야 함
// 2. (default) class: 같은 패키지에 있는 클래스들에서만 인스턴스 생성이 가능
public class Access03Main {
public static void main(String[] args) {
System.out.println("public, default 클래스");
TestPublic t1 = new TestPublic();
MyDefault t2 = new MyDefault();
TestPublic2 t3 = new TestPublic2();
// MyDefault2 t4; // cannot be resolved
} // end main()
} // end class Access05Main
class A {
}
package com.lec.java.access03;
// 디폴트 클래스는 굳이 파일명과 같을 필요 없다.
class MyDefault {
}
package com.lec.java.access03;
public class TestPublic {
}
package com.lec.java.access04;
class MyDeafault2 {
}
package com.lec.java.access04;
public class TestPublic2 {
}