접근 제한 지정

2009. 8. 21. 00:45

접근제한 테스트용 예제

  • public 접근에 제한이 없음.
  • protected 패키지 이름이 동일하거나 상속 관계에 있을 경우 접근 가능.
  • default 패키지 이름이 동일할 경우에만 접근 가능.
  • private 선언한 클래스 내에서만 접근 가능.

Base 클래스 선언

package net.jeongsam.exam1;

public Base {
    public int a;
    private int b;
    protected int c;
    int d; // default
    
    Base() {
        a = 1;
        b = 2;
        c = 3;
        d = 4;
    }
    
    void print() {
        System.out.println(a); // public - 접근 제한 없음.
        System.out.println(b); // private - Base 클래스 내에서 접근 가능.
        System.out.println(c); // protected - Base 클래스 내에서 접근 가능.
        System.out.println(d); // default - Base 클래스 내에서 접근 가능.
    }
    
    public static void main(String[] args) {
        new Base().print();
    }
}

컴파일>javac -d . Base.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성

실행>java -classpath . net.jeongsam.exam1.Base
현재 디렉터리를 기준으로 패키지 지정

동일 패키지에서 선언된 클래스

package net.jeongsam.exam1;

public Other1 {
    void print() {
        Base base = new Base();
        System.out.println(base.a); // 출력 - 접근 제한 없음.
        System.out.println(base.b); // 오류 - Base 클래스 내에서만 접근 가능.
        System.out.println(base.c); // 출력 - 동일 패키지 접근 가능.
        System.out.println(base.d); // 출력 - 동일 패키지 접근 가능.
    }
    
    public static void main(String[] args) {
        new Other1().print();
    }
}

컴파일>javac -d . Other1.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성

실행>java -classpath . net.jeongsam.exam1.Other1
현재 디렉터리를 기준으로 패키지 지정

동일 패키지에서 상속 관계 클래스

package net.jeongsam.exam1;

public Other2 extends Base {
    void print() {
        System.out.println(a); // 출력 - 접근 제한 없음.
        System.out.println(b); // 오류 - Base 클래스 내에서만 접근 가능.
        System.out.println(c); // 출력 - 동일 패키지 접근 가능. 상속 관계 접근 가능.
        System.out.println(d); // 출력 - 동일 패키지 접근 가능.
    }
    
    public static void main(String[] args) {
        new Other2().print();
    }
}

컴파일>javac -d . Other2.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성

실행>java -classpath . net.jeongsam.exam1.Other2
현재 디렉터리를 기준으로 패키지 지정

다른 패키지에서 선언된 클래스

package net.jeongsam.exam2;

import net.jeongsam.exam1.Base;

public Other3 {
    void print() {
        Base base = new Base();
        System.out.println(base.a); // 출력 - 접근 제한 없음.
        System.out.println(base.b); // 오류 - Base 클래스 내에서만 접근 가능.
        System.out.println(base.c); // 오류 - 동일 패키지만 접근 가능.
        System.out.println(base.d); // 오류 - 동일 패키지만 접근 가능.
    }
    
    public static void main(String[] args) {
        new Other3().print();
    }
}

컴파일>javac -d . -classpath . Other3.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성. import할 패키지 기준 위치 지정.

실행>java -classpath . net.jeongsam.exam2.Other3
현재 디렉터리를 기준으로 패키지 지정

다른 패키지에서 상속 관계 클래스

package net.jeongsam.exam2;

import net.jeongsam.exam1.Base;

public Other4 extends Base {
    void print() {
        System.out.println(a); // 출력 - 접근 제한 없음.
        System.out.println(b); // 오류 - Base 클래스 내에서만 접근 가능.
        System.out.println(c); // 출력 - 상속 관계 접근 가능.
        System.out.println(d); // 오류 - 동일 패키지에만 접근 가능.
    }
    
    public static void main(String[] args) {
        new Other4().print();
    }
}

컴파일>javac -d . -classpath . Other4.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성. import할 패키지 기준 위치 지정.

실행>java -classpath . net.jeongsam.exam2.Other4
현재 디렉터리를 기준으로 패키지 지정

+ Recent posts