2013년 10월 28일 월요일

자바 익명 클래스(java annoymous class) 이름이 없이 포함된 클래스

자바 익명 클래스(java annoymous class)
 
이름이 없이 포함된 클래스(일단 new 해놓고 그 안에서 클래스 정의를 구현)
이름이 없다는 점을 제외하면 지역 클래스와 유사 하다.
형식 : new 클래스이름(인터페이스 이름) (…) {…}
제공된 클래스나 인터페이스의 익명 하위 클래스를 정의한 후 그 하위 클래스의 객체를 생성하고 그 참조 값을 반환 한다.
New 수식이 올 수 있는 곳 어디든지 사용 가능하다.
생성자를 정의 할 수 없다.
쓰레드나 리스너 제작할 때 많이 사용한다.

익명 클래스는 new 수식의 연장 이므로 반드시 세미콜론(;)을 붙여야 한다.
익명 클래스를 포함하고 있는 메소드의 지역 변수중 final로 선언된 변수만 참조 가능하다.
해당 클래스나 인터페이스를 정의하여 사용 할 때 여러 곳에서 사용되는 것이 아니라 단 한번만 정의해서 사용 하는 경우에 유용하다.

[예제]
 
interface MyRunnable
{    public void run();  }
class LocalClassExam
{  
    String str;
    LocalClassExam(String str) {
        this.str = str;
    }
   
    //getRunnable 메소드 안에 Command 클래스 정의, local class
    //int i를 final로 정의안하면 run()안에서 사용불가
    MyRunnable getRunnable(final int i) {
        //아래 new 다음에 인터이스가 와도 됨 물론 클래스도된다.
     return new MyRunnable() {     
            public void run() {
                System.out.println( str + ", " + i );  //로컬변수 i는 final 임
            }
        };      
    }
    public static void main(String[] args) {
     LocalClassExam obj = new LocalClassExam( "OnJOracleJava" );
        MyRunnable run1 = obj.getRunnable(1);
        run1.run();
        MyRunnable run2 = obj.getRunnable(2);
        run2.run();
    }
}
 
[결과]
 
OnJOracleJava, 1
OnJOracleJava, 2

댓글 없음:

댓글 쓰기