Home [java] 중첩 클래스 접근 제한
Post
Cancel

[java] 중첩 클래스 접근 제한

중첩 클래스의 접근 제한

중첩 클래스에서 바깥 클래스의 필드와 메소드에 모두 접근할 수 있는 것은 아니고 제한적으로 접근이 가능하다.
바깥 클래스는 중첩 클래스를 감싸는 클래스를 말한다.

바깥 클래스에서 중첩 클래스로의 접근 제한

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A {
  B b = new B();
  C c = new C();

  static B sb = new B(); // 불가능. 클래스 A가 인스턴스화 되기 전까지는 B객체를 만들 수 없으니까.
  static C sc = new C();

  void A의메소드() {
    B b = new B();
    C c = new C();
  }
  static void A의정적메소드() {
    B b = new B(); // 불가능. 클래스 A가 인스턴스화 되기 전까지는 B객체를 만들 수 없으니까.
    C c = new C();
  }

  class B { }
  static class C { }
}

멤버 클래스의 접근 제한

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
class A {
  int A의멤버변수;
  static int A의정적변수;

  void A의메소드();
  static void A의정적메소드();

  class B {
    void B의메소드() {
      A의멤버변수 = 10; 
      A의정적변수 = 20;

      A의메소드(); 
      A의정적메소드();
    }
  }
  
  static class C {
    void C의메소드() {
      A의멤버변수 = 10; // 불가능
      A의정적변수 = 20;

      A의메소드(); // 불가능
      A의정적메소드();
    }
  }
}

인스턴스 멤버 클래스에서는 바깥 클래스의 필드와 메소드에 제한없이 접근할 수 있다.
static 멤버 클래스인 경우 바깥 클래스의 static 필드와 static 메소드에만 접근할 수 있다.

로컬 클래스의 접근 제한

사진1
로컬 클래스는 final 로 선언된 지역변수에만 접근이 가능하다.
사진2
만약 final이 없다면 암묵적으로 final로 선언해준다.
사진3
하지만 변수의 값을 재할당하면 final이 아니게되기 때문에 에러가 발생한다.

중첩 클래스에서 바깥 클래스를 this로 접근 하는 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class A {
  int field;
  void method();

  class B {
    int field;
    void method();

    void example() {
      this.field = 10; // B의 변수에 할당
      A.this.field = 20;

      this.method(); // B의 메소드 호출
      A.this.method();
    }
  }
}

바깥 클래스와 중첩 클래스의 필드, 메소드명이 같을 때 접근하는 방법이다.


** Reference **
한빛 미디어 - 혼자공부하는자바 교재의 내용을 공부하며 작성하였습니다.

This post is licensed under CC BY 4.0 by the author.

[java] 중첩 클래스 의미, 선언방법

문제해결 아이디어