2012-01-30 78 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()方法。实际上,你需要创建一个线程来运行内部类

相关问题