본문 바로가기

자바

내부클래스

package pack.inner;


public class Outer {

int a;

Inner inner;

public Outer(){

System.out.println("Outer 생성자");

a = 10;

inner = new Inner();

}

public void aa(){

System.out.println("Outer의 aa 메소드");

System.out.println("Outer a : " + a);

bb();

System.out.println("=============");

// 외부클래스에서 내부클래스 멤버를 접근할 때 인스턴스를 통해서 접근

inner.cc();

System.out.println("Inner의 b:" + inner.b);

}

public void bb(){

System.out.println("Outer의 bb 메소드");

}

//나? 내부클래스

public class Inner{ // 아웃터에 종속적이라 public은 의미 없다구?

int b = 20;

//나? 내부클래스 생성자

public Inner(){

System.out.println("Inner 생성자");

}

public void cc(){

// 내부클래스는 외부클래스의 멤버에 자유롭게 접근 가능

System.out.println("Inner에 있는 cc 메소드");

System.out.println("Outer의 a : " + a + ",Inner의 b : " + b);

bb();

}

}

class Inner2{

class Inner3{

}

}

public static void main(String[] args) {

Outer outer = new Outer();

outer.aa();

// Inner inner = new Inner(); //에라!! 내부클래스는 외부클래스에 종속적임. 따라서 외부클래스로 접근 해야함.

Outer.Inner inner = outer.new Inner();

inner.cc();

// 위와 같이 내부클래스에 접근 할 수 있지만, 일반적이지 않다.

// 일반적으로 외부클래스 멤버로 내부클래스멤버필드를 만들어서 접근 (5번,10번 줄)

// 다시 말해 외부클래스를 인스턴스화 시킬 때 외부클래스 내부적으로(생성자를 이용) 내부클래스를 인스턴스화 하여 접근하도록 한다.

}

}