ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • java 접근제한자(Public, protected, default, private)
    Java 기초 2018. 12. 27. 13:58


    Public

    클래스가 같건 다르건, 패키지가 같건 다르건 모두 접근 허용 가능

                 


    같은 클래스내에서 허용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    package packageTestA;
     
    public class A {
        
        public String field;
        
        public A() {
            
        }
        public void method() {
            System.out.println("클래스 A의 method");
        }
        
    }
     
    class A1 {
        public void method() {
            A a = new A();        //(o)
            a.field = "value";    //(o)
            a.method();            //(o)
        }
        
    }
     
    cs

     

    같은 패키지 내의 다른 클래스 허용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package packageTestA;
     
    public class B{
        public void method() {
            A a = new A();        //(o)
            a.field = "value";    //(o)
            a.method();            //(o)
        }
        
        
    }
     
    cs

     다른 패키지의 다른 클래스에서 허용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package packageTestB;
     
    import packageTestA.A;
     
    public class C {
        
        public void method() {
            A a = new A();        // (o)   
            a.field = "value";    // (o)   
            a.method();            // (o)
        }
        
    }
     
    cs

     




    Default (앞에 생략이 되어있으면 기본적으로 default)

    같은 패키지에서만 접근 허용


    같은 클래스 내에서 허용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    package packageTestA;
     
    public class A {
        
         String field;
        
         A() {
            
        }
         void method() {
            System.out.println("클래스 A의 method");
        }
        
    }
     
    class A1 {
         void method() {
            A a = new A();        //(o)
            a.field = "value";    //(o)
            a.method();            //(o)
        }
        
    }
    cs

     

     같은 패키지 내의 다른 클래스에서 허용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package packageTestA;
     
    public class B{
        public void method() {
            A a = new A();        //(o)
            a.field = "value";    //(o)
            a.method();            //(o)
        }
        
        
    }
     
    cs

     다른 패키지에서는 접근 불가

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package packageTestB;
     
    import packageTestA.A;
     
    public class C {
        
        public void method() {
            A a = new A();        // (x)   
            a.field = "value";    // (x)   
            a.method();           // (x)
        }
        
    }
     
    cs

     




    Protected

    같은 패키지에서만 접근 허용하고 다른 패키지에서 접근하려면 상속받을 시에만 가능


     같은 클래스내에서 접근 허용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    package packageTestA;
     
    public class A {
        
         protected String field;
        
         protected A() {
            
        }
         protected void method() {
            System.out.println("클래스 A의 method");
        }
        
    }
     
    class A1 {
         void method() {
            A a = new A();        //(o)
            a.field = "value";    //(o)
            a.method();            //(o)
        }
        
    }
     
    cs

     같은 패키지의 다른 클래스에서 접근 허용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package packageTestA;
     
    public class B{
        public void method() {
            A a = new A();        //(o)
            a.field = "value";    //(o)
            a.method();            //(o)
        }
        
        
    }
     
    cs

     다른 패키지의 상속받은 클래스 접근 허용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package packageTestB;
     
    import packageTestA.A;
     
    public class D extends A {
        // protected로 보호받는 A를 상속 받음
        
        public D() {
            super();                // (o)
            // 부모클래스 생성자 호출
            this.field = "value";    // (o)
            this.method();            // (o)
        }
        
    }
     
    cs

     다른 패키지의 다른 클래스 접근 불가

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package packageTestB;
     
    import packageTestA.A;
     
    public class C {
        
        public void method() {
            A a = new A();        // (x)   
            a.field = "value";    // (x)   
            a.method();            // (x)
        }
        
    }
     
    cs




    Private

    같은 클래스 내에서만 접근 허용

    private는 한 java 파일 안의 서로 다른 클래스라도 사용하지 못한다.




    private로 선언된 필드값에 접근하기 위해서는 아래의 코드처럼 setter 메소드로 접근하고

    getter 메소드로 값을 불러와야한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    package packageTestA;
     
    public class A {
        
         private String field;
        
         public A() {
            
        }
         private void method() {
            System.out.println("클래스 A의 method");
        }
        String getField() {
            return field;
        }
        void setField(String field) {
            this.field = field;
        }
         
        
    }
     
    class A1 {
         void method() {
            A a = new A();        
            a.setField("value"); 
            System.out.println(a.getField());
        }
    cs


    'Java 기초' 카테고리의 다른 글

    업캐스팅  (0) 2019.01.03
    상속의 타입(형) 변환  (0) 2019.01.03
    메소드 재정의 Override  (0) 2018.12.27
    상속의 기본 개념  (0) 2018.12.27
    class를 이용한 연습문제 (이것이 자바다 6장 20번)  (0) 2018.12.26

    댓글

Designed by Tistory.