2012-11-06 66 views
1

我明白這個代碼是不合法的:如何調用匿名內部類的方法?

class Popcorn { 
    public void pop() { 
     System.out.println("popcorn"); 
    } 
} 

class Food { 
    Popcorn p = new Popcorn() { 
     public void sizzle() { 
      System.out.println("anonymous sizzling popcorn"); 
     } 
     public void pop() { 
      System.out.println("anonymous popcorn"); 
     } 
    }; 
    public void popIt() { 
     p.pop(); // OK, Popcorn has a pop() method 
     p.sizzle(); // Not Legal! Popcorn does not have sizzle() 
    } 
} 

那麼,什麼是一個方法調用嘶嘶方法呢?

+1

爲爆米花添加嘶嘶聲,沒有別的途徑 – Jayan

+0

我最初的反應是問你爲什麼要通過向匿名類添加額外的公共方法來實現*。 –

+2

'new Popcorn(){...} .sizzle();' –

回答

6

匿名類的方法必須覆蓋/實現其超類的方法,以便從外部訪問。不幸的是,沒有辦法寫更多的樣板文件來實現你的目標。

+0

+1唯一的選擇是使用反射,如果你不能修復代碼,我只會建議使用反射。 –