2012-01-30 84 views
-4

爲什麼我必須在一個內部類擴展Thread代替實施Runnable 下面的代碼工作: -爲什麼我的`Runnable`有`start`方法?

class Outer{ 

Inner innerObj; 

Outer(){ 
    innerObj = new Inner(); 
} 

public void begin(){ 

    innerObj.start(); 
} 

class Inner extends Thread{ 

    Inner(){ 
    System.out.println("Thread initialized!"); 
    } 

    public void run(){ 

    System.out.println("Thread running!"); 

    } 
} 
} 

class Driver{ 

public static void main(String[] args){ 

    Outer o1 = new Outer(); 
    o1.begin(); 

} 

} 

但是使用Runnable導致編譯錯誤: -

class Outer{ 

Inner innerObj; 

Outer(){ 
    innerObj = new Inner(); 
} 

public void begin(){ 

    innerObj.start(); 
} 

class Inner implements Runnable{ 

    Inner(){ 
    System.out.println("Thread initialized!"); 
    } 

    public void run(){ 

    System.out.println("Thread running!"); 

    } 
} 
} 

class Driver{ 

public static void main(String[] args){ 

    Outer o1 = new Outer(); 
    o1.begin(); 

} 

} 
+7

了Runnable接口有沒有方法start()方法 – esaj 2012-01-30 17:13:22

+2

我們都知道在這種情況下,錯誤,但通常,問技術問題101的部分是當你說什麼導致錯誤,**引用錯誤消息**。在這種情況下,它應該是公然明顯:'方法開始不是類Inner'或類似的發現。 – 2012-01-30 17:18:32

回答

5

這因爲實施Runnable不給一個類的方法start。您將需要創建一個Thread運行Inner

Inner i = new Inner(); 
Thread t = new Thread(i); 
1

Runnable不提供start()方法。實際上,你需要創建一個線程來運行內部類

相關問題