2014-02-14 59 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參考上的方法,原因很明顯。編譯器找不到y()方法聲明類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(); 
    }; 
    } 
}