2014-02-14 2 views
0

우리는 슈퍼 클래스의 메소드 존재 이외의 익명 클래스의 메소드를 정의 할 수 있습니까? 우리는 어떻게 예를 들어제한이

abstract class a 
{ 
    public void method() 
    { 
    } 
} 
class b 
{ 
    public static void main(String arr[]) 
    { 
    a x=new a() 
    { 
    public void y() 
    { 
    } 
    }; 
    } 
} 

어떻게 할 수처럼 그것을 에 액세스 할 수 있습니다 y() 방법으로 액세스하고 있습니까?

답변

2

우리는 슈퍼 클래스의 메소드 존재 이외의 익명 클래스의 메소드를 정의 할 수 있습니까?

예. 실제로 당신은 당신의 예에서 그것을했습니다.

우리는 Y() 메소드에 액세스 할 수 있는지?

불행히도 x 참조에서 해당 방법에 액세스 할 수 없습니다. 이유는 분명합니다. 컴파일러에서 메서드 선언 클래스 A을 찾을 수 없습니다.

new A() { 
    public void y() 
    { 
    } 
}.y(); 

을하지만 그것은 거의 소용이 : 유일한 방법은 다음과 같이 익명 클래스 인스턴스 생성 식에 직접 그 방법에 액세스 할 수 있습니다.

또는 당신은 당신이 익명의 내부 클래스에서 재정의 클래스 A의 또 다른 방법에서 호출 할 수 있습니다.

class A { 
    public void demo() {   
    } 
} 

A obj = new A() { 
     public void demo() { 
      demo2(); 
     } 

     public void demo2() { 
      System.out.println("Hello"); 
     } 
    }; 

    obj.demo(); 
당신은 방법의 유형을 정의 할 수 있습니다,하지만 당신은 단지 그것을 같은 추상 클래스에서 다른 방법으로 형성에 액세스 할 수 있습니다
0

:

abstract class a 
{ 
    public void method() 
    { 
    } 
} 
class b 
{ 
    public static void main(String arr[]) 
    { 
    a x=new a() 
    { 
    public void y() 
    { 
    } 
    public void method() { 
     // call y() 
     y(); 
    }; 
    } 
}