根据下面的代码,选择可能的结果:
(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了??迷糊了。
其中Thread和线程仅仅相关,Runnable和线程其实毫无关系。估计选d
System.out.println("k");
}
正好是对Thread类中的run()方法的重写,同时又实现了Runnable接口中的run()方法。
所以在线程开启后会调用该run()方法,打印输出“k”。
比如ArrayList extends AbstractList implements List
而 AbstractList implements List
如果不写这个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();
}如果注释掉子类的方法,则不会报错,运行父类的方法
如果不注释掉,则运行子类的方法如果父类和接口之间没有关系,运行过程一样,同样不报错