내부 클래스와 익명 클래스
내부 클래스는 클래스 안에 또 다른 클래스를 선언하여 두 클래스의 멤버에 쉽게 접근 할 수 있도록 선언하는 방법이다.
OuterClass라는 클래스 안에 2개의 InnerClass, SInnerClass 클래스를 만들었다.
public class OuterClass { int num = 5; String str = "java"; static String sstr = "world";
public OuterClass() { System.out.println("OuterClass 생성자가 호출 됐습니다."); }
class InnerClass {
int num = 100; String str2 = str;
public InnerClass() { System.out.println("InnerClass 생성자가 호출 됐습니다."); }
}
static class SInnerClass {
int num = 1000; String str3 = str;
public SInnerClass() { System.out.println("SInnerClass 생성자가 호출됐습니다."); }
} } |
OuterClass 객체를 생성하여 안에 있는 InnerClass,SInnerClass 클래스들이 갖고있는 멤버들에 접근한다.
OuterClass outerClass = new OuterClass(); System.out.println("oc.num : " + oc.num); System.out.println("oc.num : " + oc.num); System.out.println(); OutterClass.InnerClass in = oc.new InnerClass(); System.out.println("in .num : " + in .num); System.out.println("in .str2: " + in .str2); System.out.println(); OutterClass.InnerClass si = oc.new InnerClass(); System.out.println("si .num : " + si .num); System.out.println("si .str3: " + si .str3); System.out.println(); |
익명 클래스는 이름이 없는 클래스로, 주로 메서드를 재정의 하는 목적으로 사용되며,
인터페이스나 추상 클래스에서 주로 사용된다.
public class AnonymousClass { public AnonymousClass() { System. out .println ( "AnonymousClass constructor" ); } public void method() { System. out .println ( " -- AnonymousClass's method START -- " ); } } |
new AnonymousClass() { @Override public void method() { System. out .println ( " -- AnonymousClass's Override method START -- " ); }; }.method(); |