충분히 쌓여가는
익명 클래스(anonymous class) 본문
익명 클래스
이름이 없는 일회용 클래스(정의와 생성을 동시에)
(조상 클래스 이름 혹은 구현 인터페이스 이름)
new 조상클래스이름() {
// 멤버 선언
}
// 또는
new 구현인터페이스이름() {
// 멤버 선언
}
이름이 없는 클래스이기 때문에 조상이름을 대신해서 사용
코드
class Anonymous {
Object iv = new Object() { void method(){} }; // 익명 클래스
static Object cv = new Object() { void method(){} }; // 익명 클래스
void myMethod() {
Object lv = new Object() { void method(){} }; // 익명 클래스
}
}
컴파일 시
내부 클래스이기 때문에 외부 클래스(Anonymous)가 따라옴
익명 클래스이기 때문에 이름이 숫자로 표기됨
익명 클래스 아닌 코드(EventHandler)
AWT: Java의 윈도우 프로그래밍
import java.awt.*;
import java.awt.event.*;
class Anonymous {
public static void main(String[] args) {
Button b = new Button("Start");
b.addActionListener(new EventHandler());
}
}
// 보통 1회성 코드, AWT는 보통 내부 클래스로 사용됨
class EventHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("ActionEvent occurred");
}
}
익명 클래스 사용
EvnetHandler을 사용하지않고 조상 이름이나 인터페이스 이름(ActionListener) 사용
이름이 없기 때문에 객체를 다시 만들 수 없다(클래스 정의와 생성을 동시에) = 일회용
import java.awt.*;
import java.awt.event.*;
class Anonymous {
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");
}
});
}
}
만약 2번 만들게 되면
코드는 같지만 Anonymous.n.class으로 다른 클래스이다
같은 클래스를 2번 사용한 것이 아닌 같은 내용의 클래스를 생성한 것
import java.awt.*;
import java.awt.event.*;
class Anonymous {
public static void main(String[] args) {
Button b = new Button("Start");
b.addActionListener(new ActionListener() { // Anonymous.1.class
public void actionPerformed(ActionEvent e) {
System.out.println("ActionEvent occurred");
}
});
b.addActionListener(new ActionListener() { // Anonymous.2.class
public void actionPerformed(ActionEvent e) {
System.out.println("ActionEvent occurred");
}
});
}
}
'Java > JAVA2' 카테고리의 다른 글
printStackTrace(), getMessage() (0) | 2023.06.22 |
---|---|
예외 처리하기, try-catch문 (0) | 2023.06.20 |
프로그램 오류, 예외 클래스의 계층구조 (0) | 2023.06.19 |
내부 클래스의 제어자와 접근성 (0) | 2023.06.18 |
내부 클래스(inner class) (0) | 2023.06.17 |