내부클래스 : 클래스 안의 클래스
class A {}
class B { // B 내부에 A의 객체를 생성 해주어야 A 클래스의 멤버에 접근이 가능하다. }
class A { // B의 외부클래스
class B { // 객체 생성 없이도, A의 멤버에 접근 가능 } // A의 내부 클래스
}
class Outer {
// 클래스 영역
class InstanceOuter {} // instance class
static class StaticInner {} // static class (객체 생성 없이 사용 가능)
// 메서드 영역
void myMethod() {
class LocalIneer {} // local class
}
// 익명클래스(Anonymous class): 클래스의 선언과 객체 생성을 동시에 하는 이름 없는 클래스 (일회용)
}
내부 클래스의 제어자는 변수에 사용 가능한 제어자와 동일하다.
내부 클래스에, static 변수(static int cv = 100;)를 사용하고자 할 때는 내부 클래스도 "static class" 여야 한다.
내부 클래스는, 외부 클래스의 private 멤버도 접근 가능하다.
지역 내부 클래스는, 지역 내부 클래스를 감싸고 있는 메서드의 상수만 사용 가능하다. (변수 사용 불가.)
// 자기 이름이 없으니, 조상 클래스 이름 또는 인터페이스 이름을 작성한다.
new 조상클래스이름() {
// 멤버 선언 (클래스 내용)
}
또는
new 구현인터페이스이름() {
// 멤버 선언 (클래스 내용)
}
// ex
import java.awt.*; // java 의 윈도우 프로그래밍 도구
import java.awt.event.*;
class Ex7_17 {
Object iv = new Object() { void method() {} }; // 익명 클래스
static Object cv = new Object() { void method() {} }; // 익명 클래스
void myMethod() {
Object lv = new Object() { void method() {} }; // 익명 클래스
}
}
public class Ch07_15_AnonymousClass {
public static void main(String[] args) {
Button b = new Button("Start");
b.addActionListener(
new ActionListener() { // 클래스의 정의와 객체 생성을 동시에
public void actionPerformed(ActionEvent e) {
System.out.println("ActionEvent occurred!!");
}
}
);
}
}