ch7-21 접근제어자(access modifier)
private | 같은 클래스 내에서만 접근이 가능하다. |
(default) | 같은 패키지 내에서만 접근이 가능하다. |
protected | 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다. |
pubilc | 접근 제한이 전혀 없다. |
- 4개 중 1개만 사용 가능!
제어자 | 같은 클래스 | 같은 패키지 | 자손클래스 | 전 체 |
public | O | O | O | O |
protected | O | O | O | |
(default) | O | O | ||
private | O |
// class 앞에 public, (default)만 올 수 있다.
class AccessModifierTest {
// 멤버 변수에는 4가지(public, private, (default), protected) 다 올 수 있다.
int iv; // 멤버변수(인스턴스변수)
static int cv; // 멤버변수(클래스변수)
예제)
package pkg1;
// 패키지안에 public클래스는 하나만 존재
// 다른 패키지에서 Myparent쓰기 위해 public으로 바꿈
public class Myparent { // public클래스와 소스파일 이름 일치해야함.
private int prv; // 같은 클래스
int dft; // 같은 패키지
protected int prt; // 같은 패키지 + 자손(다른 패키지)
public int pub; // 접근제한 없음.
public void printMembers() {
System.out.println(prv); // OK
System.out.println(dft); // OK
System.out.println(prt); // OK
System.out.println(pub); // OK
}
}
class MyparentTest {//접근제어자가 default => 같은 패키지
public static void main(String[] args) {
Myparent p = new Myparent();
System.out.println(p.prv); // 에러. private 같은 클래스 안에서만
System.out.println(p.dft); // OK
System.out.println(p.prt); // OK
System.out.println(p.pub); // OK
}
}
package pkg2;
import pkg1.MyParent;
class MyChild extends MyParent {
public void printMembers() {
System.out.println(prv); // 에러 다른 클래스
System.out.println(dft); // 에러 다른 패키지
System.out.println(prt); // OK 다른 패키지의 자손
System.out.println(pub); // OK
}
}
public class MyparentTest2 {
public static void main(String[] args) {
Myparent p = new Myparent();
System.out.println(p.prv); // 에러
System.out.println(p.dft); // 에러
System.out.println(p.prt); // 에러
System.out.println(p.pub); // OK 접근제한 없음
}
}
'Dev > Java' 카테고리의 다른 글
[Java] 자바의 정석 기초편 ch7-23 다형성(polymorphism) (0) | 2022.06.22 |
---|---|
[Java] 자바의 정석 기초편 ch7-22 캡슐화와 접근 제어자 (0) | 2022.06.22 |
[Java] 제네릭 (Generic) (0) | 2022.06.16 |
[Java] 자바의 정석 기초편 ch7-17~20 제어자, static, final, abstract (0) | 2022.06.15 |
[Java] 자바의 정석 기초편 ch7-15,16 import문, static import문 (0) | 2022.06.13 |