2013-09-28 279 views
-1

我們可以創建一個接口但不是對象的引用。但是我們如何將新的Runnable()傳遞給Thread構造函數。據我所知,演唱會新的Class_Name()是對象。關於線程的困惑

Thread t = new Thread(new Runnable(){}); 
+3

在你的問題你的意思是「實例」,而不是「參考」。如果你想讓人們理解你,使用正確的詞彙是非常重要的。否則你的問題沒有意義,因爲你可以創建一個對任何事物的引用,類/抽象類/接口 –

回答

3

這裏使用的伎倆被稱爲anonymous classes。基本上,您正在創建一個實現Runnable的新匿名類的對象。

的更好的例子是這樣的:

Thread t = new Thread(new Runnable(){ 
    @Override 
    public void run() { 
     // Code here 
    } 
}); 
1

我們可以創建一個接口的參考,但不反對

這不是真的。

ClassA classa = new ClassA(); 

這將爲ClassA創建一個新實例,而classa爲參考。

但如何才能通過新的Runnable()的Thread構造

Thread t = new Thread(new Runnable(){}); 

這將讓一個線程,其中t是參考的實例。新的Runnable(){}被稱爲anonymous class。因爲創建了一個實例,所以引用被傳遞給構造函數,但是以後在代碼中不能引用該實例。

但是用這一行你應該得到一個編譯錯誤。您必須重寫運行方法。

Thread t = new Thread(new Runnable(){ 
    @Override 
    public void run(){ 
    } 
}); 
+0

「因爲創建了一個實例但沒有引用。」 - 不對。什麼是線程構造函數被傳遞,如果不是對Runnable的引用? – Ingo

+0

@Ingo是的,對。也許我的解釋在這一點上是有缺陷的。構造函數將獲得一個引用,但是之後沒有可以使用的引用。我仍然努力解釋這樣的事情。 –