黑马程序员技术交流社区

标题: 一个线程的面试题,有人有正解么? [打印本页]

作者: 宋旭东    时间: 2013-7-6 14:49
标题: 一个线程的面试题,有人有正解么?
class Test implements Runnable
{
Public void run(Thread r)
{ }
}
问:如果错误,错误发生在代码的哪一行。

作者: 草貌路飞    时间: 2013-7-6 15:26
第三行 Test类要覆盖接口中的run方法,而接口中的run方法是没有参数的
作者: 宋旭东    时间: 2013-7-6 16:09
草貌路飞 发表于 2013-7-6 15:26
第三行 Test类要覆盖接口中的run方法,而接口中的run方法是没有参数的

貌似回答不是很正确。代码是逐行编译的,第一行中实现接口,第一反应是复写方法,而没有复写方法,应该定义为抽象类,这样理解呢?
作者: zms2100    时间: 2013-7-6 17:02
草貌路飞 发表于 2013-7-6 15:26
第三行 Test类要覆盖接口中的run方法,而接口中的run方法是没有参数的

我还是顶沙发的童鞋,O(∩_∩)O~............
1、差不多的,反正就是要复写接口抽象方法,而题目中的void run(Thread r)不是复写,而是重载,所以不行;
反正已经指出了原因,至于解决方案,就是1、重新复写run()方法;2、给类定义抽象修饰符abstract;
2、第二点是指出代码错误,public是关键字,严格区分大小写,所以Public是错误的。
暂时就想到这么多,O(∩_∩)O~

作者: 草貌路飞    时间: 2013-7-6 19:30
宋旭东 发表于 2013-7-6 16:09
貌似回答不是很正确。代码是逐行编译的,第一行中实现接口,第一反应是复写方法,而没有复写方法,应该定 ...

你是对的..果然面试题不会这么简单,还是得多想想..学到了
作者: 草貌路飞    时间: 2013-7-6 19:33
zms2100 发表于 2013-7-6 17:02
我还是顶沙发的童鞋,O(∩_∩)O~............
1、差不多的,反正就是要复写接口抽象方法,而题目中的void ...

他是对的..以后面试遇到要小心了…如果是正常写代码,我们肯定是觉得这个run方法有问题。但按正确性来讲,这个Test类想自己重载一个方法是没有错的,虽然这个方法可能没有意义。
作者: 刘张朋    时间: 2013-7-6 20:58
个人理解:在编译时编译器会先检查语法错误,在检查逻辑错误。首先代码的第三行public错在p大写了,这是编译器会报一些跟该方法需要标识符,方法申明无效、需要返回值类型等错误。在将代码的p改为小写后,编译器才因为未覆盖run方法,而报Test应表示为抽象类。
作者: 宋旭东    时间: 2013-7-6 22:24
zms2100 发表于 2013-7-6 17:02
我还是顶沙发的童鞋,O(∩_∩)O~............
1、差不多的,反正就是要复写接口抽象方法,而题目中的void ...

确实是第一行的报错,声明为抽象类就好了,报的错就是这个。可以运行试试。编译首先会检测到这个的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2