请教大家JAVA中接口的实现原理?
请教大家一个JAVA中的接口问题,在下面的程序里如果不实现Runnable接口,而是直接在类A中添加一个run()那么编绎时会出错。
可是Runnable接口中也就一个run()方法,我自己在类A中加一个run()就不行了吗?
加implements Runnable与不加implements Runnable 它们实现的机制有什么不一样呢?
class A implements Runnable //如果去掉implements Runnable,那么编绎时会出错。
{
public void run()
{
System.out.println( "hello I 'm A ");
}
}
public class Test
{
public static void main(String args[])
{
A a =new A();
new Thread(a).start();
}
}
------解决方案--------------------对于非线程的类,自己可以加run(),但是只能通过明确的调用run()来执行它.
而对于线程中的run(),就象你在Test中看到的,用new Thread(a).start(); 就会调用a的run();
------解决方案--------------------如果你不去实现接口:Runnable 那么你在Test类中就去掉 new Thread(a).start();
只有这样你在调用run()方法时才不会出错,因为在new Thread(a).start();中是指定了要去实现Runnable借口的
既然你没有去重写它的run()方法,那就肯定是要报错的拉!
------解决方案--------------------To xiangfeidecainiao
我知道这两种方法, 我的疑问是对于第二种方法 "实现implements Runnable " 为什么一定要implements Runnable呢,加入run()方法不就好了吗?
-------------------------------
实现了Runnable接口的类还不算线程,因为接口只是提供空函数,并不作什么特别的处理,所以这样的类只能说是可能成为线程,还必须用Thread(Runnable target)构造函数生成一个线程对象并启动才算是线程
你自己写一个类带有run方法可以,但是该类不能通过Thread构造函数生成线程对象就不能成为线程,所以结论就是还是要实现Runnable
------解决方案--------------------再请教下 JAVA对implements Runnable的处理 与 没有implements Runnable的处理有什么不一样呢?
---------------------
没有什么特别的,就是我上面说的,关键是Thread的构造函数需要的是Runnable接口而不是你要的类
------解决方案--------------------其实这都是规定
SUN公司的规定
每种语言都有自己的格式和规定
你想得到回报必须付出
你想实现多线程就要实现Runnable借口,或者继承Thread
------解决方案--------------------下面的说明不是说了start方法做什么了吗?
调用start方法将使该线程开始运行,java虚拟机将调用该线程的run方法
结果是2个线程将并行执行。
不要重复执行一个线程的start方法。。。。。。。。。。。。。
你指的是想看start方法的源代码??那你直接看源代码。sun可以下载的。
------解决方案--------------------你%JAVA_HOME% 根目录下面有一个src.zip
里面有所有的源代码的