2012-10-19 60 views
0

創建對象時可以聲明一個方法嗎?我在Java跨下面的代碼行跑:創建對象並同時定義方法

public static void main(String[] args) { 
     Comparator<String> comparator = new Comparator<String>() { 
      public int compare (String s1, String s2) { 
       return s1.compareToIgnoreCase(s2); 
      } 
     }; 
} 

它看起來就像是在創建對象comparator,代碼添加到實現Comparator<T>接口的方法。在創建實例時是否總是可以添加其他方法,還是特別與java接口相關?

感謝您的幫助!

回答

1

這不是你想象的那樣。

無論如何new Comparator<String>()是一個匿名的內部類。這意味着匿名類是Comparator類的實現者。

您可以有兩個oprions:

1. AnyClass object = new AnyClass() { // anonymous inner class starts here. 
// In this case , inner class is a sub class of AnyClass. 
};// ends here 
2. AnyInterface anyInterface = new AnyInterface() { //anonymous inner class starts here. 
// In this case , inner class is implementer of AnyInterface. 
}; // ends here. 
+0

很好的解釋。非常清楚! – Drogba

+0

,這使得它如此清晰。謝謝! – nemesis

1

是的,你可以做到這一點。它被稱爲Anonymous Class。這意味着你正在創建一個新的類,但你沒有給它起一個名字(這就是爲什麼它是匿名的)。在你的例子中,這個匿名類實現了Comparator<String>接口,它應該在其正文中定義compare方法。這就是代碼工作的原因。