2011-03-01 3 views
3
abstract class Two { 
    Two() { 
     System.out.println("Two()"); 
    } 
    Two(String s) { 
     System.out.println("Two(String"); 
    } 
    abstract int display(); 
} 
class One { 
    public Two two(String s) { 
     return new Two() {   
      public int display() { 
       System.out.println("display()"); 
       return 1; 
      } 
     }; 
    } 
} 
class Ajay { 
    public static void main(String ...strings){ 
     One one=new One(); 
     Two two=one.two("ajay"); 
     System.out.println(two.display()); 
    } 
} 

우리는 다음 추상 클래스를 인스턴스화 할 수없는 이유입니다 기능 두 개의 (문자열들) 추상 클래스 의 인스턴스를 만들 수 ????추상 클래스와 익명 클래스

답변

9

초록 Two의 인스턴스를 만들지 않습니다. Two을 확장하는 구체적인 익명 클래스를 만들고 인스턴스화합니다.

그것은 이렇게 명명 내부 클래스를 사용하는 거의 등가이다 :

class One { 
    public Two two(String s) { 
     return new MyTwo(); 
    } 

    class MyTwo extends Two { 
     public int display() { 
      System.out.println("display()"); 
      return 1; 
     } 
    } 
} 
+2

[내 마음을 미리 읽기 중지] (http://stackoverflow.com/questions/5154740/abstract-class-and-anonymous-class/5154764#5154764)! –

+0

익명 MyTwo를 만드는 방법이 있습니까? –

+0

@Usman 네, 그게 원래의 포스터의 질문입니다. –

2

그것을 누락 된 기능을 구현하므로 디스플레이(). 2의 익명 하위 클래스를 반환합니다. 컴파일 된 파일을 보면 이것을 볼 수 있습니다. Two.class를 확장하는 One $ 1.class가 있습니다.