카테고리 없음

내부 클래스와 익명 클래스

kalza 2018. 8. 31. 16:10

내부 클래스는 클래스 안에 또 다른 클래스를 선언하여 두 클래스의 멤버에 쉽게 접근 할 수 있도록 선언하는 방법이다.

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();