2012-09-10 46 views
0

下面是在這個例子中匿名內部類的,我們做匿名類與我們可以包含匿名主要方法類

class A 
{ 
    void one() 
    { 
     System.out.println("hello"); 
    } 
} 

class One 
{ 
    public static void main(String args[]) 
    { 
     new A() 
     { 
      void five() 
      { 
       one(); 
      } 
     }.five(); 
    } 
} 

我的問題是,我們可以讓One類爲匿名(而不是它的內部匿名類)即簡單的類包含公共靜態無效主要方法。

+1

你試過了嗎?當你這樣做時它會編譯嗎?更重要的是,它運行嗎? –

+1

你的問題確實不清楚。 'One'是一個頂級的課程;匿名課程總是嵌套的......你究竟想要達到什麼目的呢? –

回答

3

static void main(String...)必須是static並且內部類(匿名或其他)不能有靜態方法。

在嵌套類VS內部類http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

嵌套類分爲兩類:靜態和非靜態的。被聲明爲靜態的嵌套類簡單地稱爲靜態嵌套類。非靜態嵌套類稱爲內部類。

+0

如何做到這一點可以請你解釋先生? – Abhishekkumar

+0

我以爲你可以,但你不能。 –

+0

谷歌不同意;)https://www.google.co.uk/search?q=inner+class+cannot+have+static+methods –

0

您無法爲匿名類創建靜態方法。在第一種情況下,您將無法引用靜態方法。唯一可能的方式是通過運行時的反射(幾乎沒有好的編碼習慣)。在第二種情況下,所有匿名和內部類都使用某個「父」實例創建(在您的示例中,您的匿名實例將包含對One實例的引用)。這意味着內部和匿名類不是用靜態方法設計的。如果他們確實需要靜態方法,那麼他們應該是父類的一部分。