본문 바로가기
Dev/Java

[Java] 자바의 정석 기초편 ch7-21 접근제어자(access modifier)

by 코딩삐약 2022. 6. 21.

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 접근제한 없음
    }
}