根据下面的代码,选择可能的结果:
(1)class Demo extends Thread implements Runnable{
(2)   public void run(){
System.out.println("k");
 }
 public static void main(String []args) {
 Thread t=new Thread(new Demo());
(3)  t.start();
 }     
}
a.代码(1)出错.
b. 代码(2)出错
c. 代码(3)出错
d.正常输出”k”是选a了还是选b了??迷糊了。

解决方案 »

  1.   

    Thread和Runnable是面向对象项目的关系,
    其中Thread和线程仅仅相关,Runnable和线程其实毫无关系。估计选d
      

  2.   

    经过实验,正常输出“k”。public void run() {
        System.out.println("k");
    }
    正好是对Thread类中的run()方法的重写,同时又实现了Runnable接口中的run()方法。
    所以在线程开启后会调用该run()方法,打印输出“k”。
      

  3.   

    继承Thread和接口runnable,重写和实现了run()方法,结果是:正常输出k
      

  4.   

    没什么,jdk中很多类都是这样
    比如ArrayList extends AbstractList implements List
    而 AbstractList implements List
      

  5.   

    答案显然是k了  重写了Thread中的run方法 运行当然是k了
    如果不写这个run方法也是不会错的,因为子类已经隐式的有了run方法,相当于对实现了Runnable的方法,而且其实接口和父类之间是否有关系都是无关紧要的。
    给个例子,三个类如下:
    public class Child extends Father implements InterFace {
    // public void run(){
    // System.out.println("this is child");
    // }
    public static void main(String[] args) {
    new Child().run();
    }
    }public class Father implements InterFace {
    public void run() {
    System.out.println("this is father");
    }
    }
    public interface InterFace {
    public  abstract void run();
    }如果注释掉子类的方法,则不会报错,运行父类的方法
    如果不注释掉,则运行子类的方法如果父类和接口之间没有关系,运行过程一样,同样不报错