내부 클래스
내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있습니다.
코드의 복잡성을 줄일 수 있습니다(캡슐화)
내부 클래스의 선언
class Outer {
int iv = 0;
abstract int cv = 0;
void myMethod() {
int lv = 0;
}
}
class Outer {
class InstanceInner {}
static class StaticInner{}
void myMethod(){
class LocalInner {}
}
}
이렇게 변경 가능합니다.
내부 클래스의 제어자와 접근성
내부 클래스도 클래스이기 때문에 abstract나 final과 같은 제어자를 사용할 수 있을뿐 아니라 멤버변수들처럼 private.protected과 접근제어자도 사용이 가능합니다
익명 클래스
이름이 없으며 클래스의 선언과 객체의 생성을 동시에 하기 때문에 단 한번 만 사용 될 수 있고 오직 하나의 객체만을 생성할 수 있는 일회용 클래스 입니다.
단 하나의 클래스를 상속받거나 단 하나의 인터페이스만을 구현할 수 있습니다.
new 조상클래스명() {
// 멤버 선언
}
또는
new 구현할인터페이스명() {
// 멤버 선언
}
import java.awt.*;
import java.awt.event.*;
class InnerEx7{
public static void main(String[] args) {
Button b = new Button("Start");
b.addActionListener(new EventHandler()); // EventHandler 클래스 선언
}
}
class EventHandler implements ActionListener { // EventHandler 클래스 코드
public void actionPerformed(ActionEvent e) {
System.out.println("ActionEvent occurred!!!");
}
}