请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

同时使用两种方法创建线程疑问

public static void main(String[] args){
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(“我来自Runnable”);
}
}){
@Override
public void run() {
System.out.println(“我来自Thread”);
}
}.start();
}
以上代码中的new Runnable() {
@Override
public void run() {
System.out.println(“我来自Runnable”);
}
},Runnable是一个接口,在此处为什么可以new?难道是此处java自动通过动态代理生成实例了吗?

正在回答

1回答

这是Java的匿名内部类写法。实质上是使用匿名接口来实现匿名内部类的, 匿名接口这样写是会自动生成一个实现了该接口的匿名类。

1 回复 有任何疑惑可以回复我~
  • 提问者 水桶一号 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-09-16 14:24:44
  • 悟空老师,你在覆写Thread的run方法时将默认的super方法删除了,一般覆写父类的方法,都会自动添加super,这样父类中的方法就能调到了
    回复 有任何疑惑可以回复我~ 2019-10-10 22:43:39
  • 悟空 回复 duobao666 #3
    是否保留super方法是根据实际需要的,比如在这里,我们的目的就是完全重写父类的run方法,所以在此处不应该保留super的,否则逻辑就混乱了,否则就会变成RUNNABLE也执行,重写的run方法也执行,那样不符合我们的预期。虽然覆写父类的方法的时候,编辑器都会自动添加super,但是我们还是需要根据实际情况选择是否保留super的方法。
    回复 有任何疑惑可以回复我~ 2019-10-10 22:53:24
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信