'Java 접근 제어자'에 해당되는 글 1건

728x90

패키지의 선언
-
패키지는 소스파일의 첫 번째 문장으로 단 한번 선언
-
같은 소스 파일의 클래스들은 모두 같은 패키지에 속하게 된다.
-
패키지 선언이 없으면, 이름없는 패키지에 속하게 된다.

- 패키지명은 선언시 반드시 소문자로 선언해야 한다.


import
-
클래스를 사용할 때 패키지 이름을 생략할 수 있다.
-
컴파일러에게 클래스가 속한 패키지를 알려준다.
-
java.lang 패키지의 클래스는 import 하지 않고도 사용할 수 있다.
- import
문은 패키지문과 클래스 선언의 사이에 선언한다.

접근 제어자

제어자

같은 클래스

같은 패키지

자손 클래스

전체

 public





 protected



 

 (default)

 

 

private

 

 

 


아래 코드는 Eclipse 툴이 아니라 Android Studio 에서 Android 어플 작성을 위한 코드 생성으로 테스트했다.

개념은 동일하므로 Eclipse, Android Studio 상관 없다.

package com.link2me.android.pkg1;

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 class 이름이 2개 오면 에러가 발생한다.
    // 같은 패키지
    public void printMembers(){
        MyParent mp = new MyParent();
        //System.out.println(mp.prv); // 에러, private은 같은 class 내에서만 접근 가능
        System.out.println(mp.dft); // OK, default는 같은 패키지내에서 접근 가능
        System.out.println(mp.prt); // OK, protected는 같은/다른 패키지 + 자손
        System.out.println(mp.pub); // OK, public은 접근 제한이 전혀 없다
    }

package com.link2me.android.pkg2;

import com.link2me.android.pkg1.MyParent;

public class MyChild extends MyParent { // 상속 받음
    // 다른 패키지 + 자손
    public void printMembers(){
        //System.out.println(prv); // 에러, private은 같은 class 내에서만 접근 가능
        //System.out.println(dft); // 에러, default는 같은 패키지내에서만 접근 가능
        System.out.println(prt); // OK, protected는 같은/다른 패키지 + 자손
        System.out.println(pub); // OK, public은 접근 제한이 전혀 없다
    }
}

class MyParentTest { // 접근제어자가 default
    // 하나의 파일에 public class 이름이 2개 오면 에러가 발생한다.
    // 다른 패키지 + 다른 class
    public void printMembers(){
        MyParent mp = new MyParent();
        //System.out.println(mp.prv); // 에러 private은 같은 class 내에서만 접근 가능
        //System.out.println(mp.dft); // 에러, default는 같은 패키지내에서만 접근 가능
        //System.out.println(mp.prt); // 에러, protected는 같은/다른 패키지 + 자손
        System.out.println(mp.pub); // OK, public은 접근 제한이 전혀 없다
    }
}


블로그 이미지

Link2Me

,