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번 줄)
// 다시 말해 외부클래스를 인스턴스화 시킬 때 외부클래스 내부적으로(생성자를 이용) 내부클래스를 인스턴스화 하여 접근하도록 한다.
}
}
'자바' 카테고리의 다른 글
동기화 synchronized (0) | 2014.02.25 |
---|---|
쓰레드로 만든 시계 (0) | 2014.02.24 |
인터페이스와 어댑터(추상클래스) (0) | 2014.02.21 |
클래스의 포함 관계 예제 (클래스를 필드멤버 처럼 사용) (0) | 2014.02.19 |
Singleton 이해하는 예제 (0) | 2014.02.19 |