Java-Inner Class
종류 | 특징 |
---|---|
instance class | 1. 외부 클래스의 멤버변수 선언위치에 선언 2. 외부 클래스의 인스턴스멤버처럼 다루어짐 3. 주로 외부 클래스의 인스턴스멤버들과 관련된 작업에 사용될 목적으로 선언 |
static class | 1. 외부 클래스의 멤버변수 선언위치에 선언 2. 외부 클래스의 static멤버처럼 사용됨 3. 주로 외부 클래스의 static멤버, static 메서드에서 사용될 목적으로 선언 |
local class | 1. 외부 클래스의 메서드나 초기화블럭 안에 선언 2. 선언된 영역 내부에서만 사용 |
anonymous class | 1. 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스 |
// 외부 클래스
class Outer {
// 내부 클래스
class Inner {
int iv = 100;
}
// 스태틱 내부 클래스
static class StaticInner {
int iv = 200;
}
// 외부 클래스의 멤버변수
int value = 10;
// 내부 클래스2
class Inner2 {
// 내부 클래스2 멤버변수
int value = 20;
// 내부 클래스2 함수
void method1() {
// 함수의 지역변수
int value = 30;
System.out.println(value);
System.out.println(this.value);
System.out.println(Outer.this.value);
}
}
}
public class ExampleInnerClass {
public static void main(String[] args) {
// static class 가 아닌 경우 외부 클래스의 인스턴스를 먼저 생성한다.
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
System.out.println(inner.iv);
// 스태틱 내부 클래스는 외부 클래스를 먼저 생성하지 않아도 됨
Outer.StaticInner staticInner = new Outer.StaticInner();
System.out.println(staticInner.iv);
// 내부 클래스2 호출
Outer.Inner2 inner2 = outer.new Inner2();
inner2.method1();
Frame f = new Frame();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
e.getWindow().setVisible(false);
e.getWindow().dispose();
System.exit(0);
}
});
}
}
참고도서 : 자바의 정석
댓글
댓글 쓰기