输出为:RunnableA ThreadB
我不明白怎么回事??(在类B的run方法中会发生什么) 通用标签

有帮助吗?

解决方案

请仔细查看Thread类的run方法的实现,如下所示: 通用标签

因此,调用Thread的run方法将调用传递的Runnable的运行,在您的情况下,您在创建Thread t时已传递了A的实例。因此,调用super.run()会调用Thread类的run方法,而该方法又会调用A(可运行的或目标的)的run方法。

其他提示

super.run()中调用B#run时,它将执行Thread#run,然后将执行传递给构造函数的run实例的下一个Runnable方法。

Thread.run只是调用您提供的run实现的Runnable方法。但是,您永远不要调用Thread.run,而要调用Thread.start

因为您有B的子类,并覆盖了其方法run()

它将首先调用B的方法。

Brun()中找到超级调用,因此它先调用superrun()(将执行提供的Runnablerun()),然后再执行Brun()

创建类B的对象并将a传递给它时,类b的构造函数称为。B的构造函数有什么用? 超级(r); 这将r设置为超级调用。 现在主要是当您说t.run()时,它调用类B的重写方法,该方法通过说出super(r)来调用与您绑定了super的对象的run方法。因此,首先调用a的run方法,然后然后打印“ ThreadB”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top