class A { // 외부 클래스
...
class B { // 내부 클래스
...
}
...
}
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
- 코드의 복잡성을 줄일 수 있다.(캡슐화)
class A { int i = 100; B b = new B(); class B { void method() { // A a = new A(); // System.out.pirntln(a.i); System.out.println(i); // 객체 생성없이 외부 클래스 사용 가능 } } }
내부 클래스의 종류와 유효범위(scope)는 변수와 동일
class Outer { class InstanceInner {} // 인스턴스 내부 클래스 static class StaticInner {} // 스태틱 내부 클래스 void myMethod() { class LocalInner {} // 지역 내부 클래스 } }
private, protected, (default), public 다 됨
class Outer { private class InstanceInner {} protected static class StaticInner {} void myMethod() { class LocalInner {} } }
이름이 없는 일회용 클래스. 정의와 생성을 동시에
------ 일반적인 클래스 ------ class ex { public static void main(String[] args) { Button b = new Button("start"); b.addActionListener(new EventHeandler()); } } class EventHandler implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println("ActionEvent occurred!!!"); } } ----- 익명 클래스를 사용 ----- b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("ActionEvent occurred!!!"); } });