日期:2014-05-20  浏览次数:20717 次

请教大家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
里面有所有的源代码的