패키지의 선언
- 패키지는
소스파일의 첫 번째 문장으로 단 한번 선언
- 같은
소스 파일의 클래스들은 모두 같은 패키지에 속하게 된다.
- 패키지
선언이 없으면,
이름없는
패키지에 속하게 된다.
- 패키지명은 선언시 반드시 소문자로 선언해야 한다.
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은 접근 제한이 전혀 없다 } }
|