2013-10-27 104 views
0
package wrap; 

public class Anonymous { 

    public Circle getCircle(int radius){ 

     return new Circle(radius){ 
      private int rad; 
      public double area() { 
       return 3.14*rad*rad; 
      } 
     }; 
    } 

    public static void main(String[] args) { 
     Anonymous p = new Anonymous(); 
     Circle w = p.getCircle(10); 
     System.out.println(w.area()); 
    } 
} 
    class Circle { 
     private int rad; 
     public Circle(int radius) { 
      rad = radius; 
     } 
     public double area() { 
      return rad*rad; 
     } 
    } 

我在內部創建了getcircle方法的Circle的匿名內部類。但是調用getcircle方法並沒有顯示「我在裏面」。爲什麼這樣呢?匿名類應該重寫外部的Circle類。Java匿名類的用法

+1

你爲什麼期望它打印「我在裏面」?您沒有構造函數,但在匿名類中有一個名稱爲「Circle」的方法。 –

回答

3

public void Circle(int radius) { 

是一個返回類型void,不是構造方法聲明。

The Java language specification states

匿名類不能有一個明確的聲明的構造。 相反,Java編譯器必須自動爲匿名類提供一個匿名的 構造函數。

既然你永遠不會調用上述聲明的Circle(int)法,String"I am inside"從不打印。

+0

我得到0.0作爲output.I期待314作爲輸出 – tcp

+0

@Pavan你已經在你的匿名類中聲明瞭一個名爲'rad'的字段,它隱藏了超類'Circle'中相同名字的字段。當你在覆蓋'area'方法中引用它時,你指的是匿名類'字段,默認情況下它初始化爲'0'。 –