자바

JAVA 자바 중첩 클래스 : 중첩 클래스의 접근 제한 - 바깥 필드와 메서드에서 사용 제한, 멤버 클래스에서 사용 제한

알통몬_ 2017. 3. 13. 10:22
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

바깥 필드와 메서드에서 사용 제한

 멤버 클래스가 인스턴스 또는 정적으로 선언됨에 따라 

바깥 클래스의 필드와 메서드에 사용 제한이 생깁니다.

예제.  

B 클래스는 인스턴스 멤버이기 때문에 바깥 클래스의 인스턴스 필드의 초기값이나 

인스턴스 메서드에서 객체를 생성할 수 있으나, 

정적 필드의 초기값이나 정적 메서드에서는 객체를 생성할 수 없습니다. 

반면에 정적 멤버 클래스인 C 클래스는 모든 필드의 초기값이나 모든 메서드에서 객체를 생성할 수 있습니다.

public class A {

//인스턴스 필드

B field1 = new B();               

C field2 = new C();               

//인스턴스 메소드

void method1() {

B var1 = new B();

C var2 = new C();

}

//정적 필드 초기화

//static B field3 = new B();

static C field4 = new C();

//정적 메소드

static void method2() {

//B var1 = new B();

C var2 = new C();

}

//인스턴스 멤버 클래스

class B {}

//정적 멤버 클래스

static class C {}

}


멤버 클래스에서 사용 제한

 멤버 클래스가 인스턴스 또는 정적으로 선언됨에 따라 

멤버 클래스 내부에서 바깥 클래스의 필드와 메서드를 접근할 때에도 제한이 따릅니다. 

인스턴스 멤버 클래스(B클래스) 안에서는 바깥 클래스의 모든 필드와 메서드에 접근할 수 있지만, 

정적 멤버 클래스(C클래스)안에서는 바깥클래스의  정적필드와 정적메서드에만 접근할 수 있고 

인스턴스 필드와 메서드에는 접근할 수 없습니다.

public class A {

int field1;

void method1() { }

static int field2;

static void method2() { }

class B {

void method() {

field1 = 10;

method1();


field2 = 10;

method2();

}

}

static class C {

void method() {

//field1 = 10; // 정적 멤버 클래스인 C클래스에서는 바깥 클래스의

//method1(); // 인스턴스 필드와 메서드에 접근할 수 없습니다.


field2 = 10;

method2();

}

}

 

}

반응형