접근 제어자

BuZZLightyear·2023년 2월 27일
0

정리

목록 보기
10/47

제어자란?

자바에서 제어자는 클래스,필드,메서드,생성자 등에 부가적인 의미를 부여하는 키워드
크게 접근 제어자기타 제어자로 나눔

접근제어자 : public, protected, (dafault), private
기타제어자 : static, final, abstract, native, transient, synchronized 등

하나의 대상에 여러 제어자를 사용 가능 but 각 대상에 대해서 접근제어자는 단 한번만 사용가능

default는 접근제어자가 안붙어 있을 경우를 뜻함

public(접근 제한 없음) > protected(동일 패키지 + 하위클래스) > default(동일 패키지) > private(동일 클래스)

package package1; // 패키지명 package1 

//파일명: Parent.java
class Test { // Test 클래스의 접근 제어자는 default
    public static void main(String[] args) { // 같은패키지이지만 동일 클래스가 아닐 때
        Parent p = new Parent();

//        System.out.println(p.a); // 동일 클래스가 아니기 때문에 에러발생!
        System.out.println(p.b);
        System.out.println(p.c);
        System.out.println(p.d);
    }
}

public class Parent { // Parent 클래스의 접근 제어자는 public
    private int a = 1; // a,b,c,d에 각각 private, default, protected, public 접근제어자 지정
    int b = 2;
    protected int c = 3;
    public int d = 4;

    public void printEach() { // 동일패키지 동일 클래스일 때
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
    }
}
package package2; // package2 

//파일명 Test2.java
import package1.Parent;

class Child extends package1.Parent {  // package1으로부터 Parent 클래스를 상속 
                                          패키지는 다르지만 하위 클래스일때
    public void printEach() {
        // System.out.println(a); // 같은 클래스일때만 가능
        // System.out.println(b); // 같은 패키지일때만 가능
        System.out.println(c); // 같은 패키지 or 하위 클래스에서 가능
        System.out.println(d); // 다 가능
    }
}

public class Test2 { // 패키지, 클래스 다 다들때
    public static void main(String[] args) {
        Parent p = new Parent();

//        System.out.println(p.a); // public을 제외한 모든 호출 에러!
//        System.out.println(p.b);
//        System.out.println(p.c);
        System.out.println(p.d);
    }
}
profile
버즈라이트이어

0개의 댓글