طريقة التشغيل في فئة الموضوع
-
28-10-2019 - |
سؤال
الإخراج هو:RunnableA ThreadB
لا أفهم كيف يأتي؟؟(ماذا يحدث في طريقة التشغيل في الفئة ب)
class A implements Runnable{
public void run(){
System.out.println("RunnableA");
}
}
class B extends Thread{
B(Runnable r){
super(r);
}
public void run(){
super.run();
System.out.println("ThreadB");
}
}
class Demo{
public static void main (String []args){
A a=new A();
Thread t=new B(a);
t.run();
}
}
المحلول
انظر بعناية إلى تنفيذ طريقة التشغيل لفئة Thread على النحو التالي: Genacodicetagpre
لذا فإن استدعاء طريقة التشغيل لـ Thread يستدعي تشغيل Runnable الذي تم تمريره ، في حالتك ، تكون قد اجتزت مثيل A أثناء إنشاء Thread t.لذا فإن استدعاء super.run () يستدعي طريقة التشغيل لفئة Thread والتي بدورها تستدعي طريقة التشغيل لـ A (التي يمكن تشغيلها أو الهدف).
نصائح أخرى
كما تتصل super.run()
في B#run
سيتم تنفيذه Thread#run
التالى run
طريقة المثيل Runnable
سيتم تنفيذ الذي قمت بتمريره إلى المنشئ.
Thread.run
ببساطة يدعو run
طريقة Runnable
التنفيذ الذي قدمته.ولكن لا يجب عليك الاتصال أبدًا Thread.run
, ، بدلاً من ذلك اتصل Thread.start
.
لأن لديك فئة فرعية B
وتجاوز طريقته run()
.
سوف يتصل B
طريقة أولا.
و في B
'س run()
تجد المكالمة الفائقة فتتصل super
'س run()
(والتي سوف تنفذ المقدمة Runnable
'س run()
) أولا ثم تنفيذ B
'س run()
عندما أنشأت كائنًا من الفئة B ومررت a إليه ، تم استدعاء مُنشئ الفئة b. ماذا يوجد في مُنشئ الفئة B؟ سوبر (ص) ؛ هذا يحدد r ليكون الدعوة الفائقة. الآن بشكل رئيسي عندما تقول t.run () ، فإنها تسمي الطريقة المتجاوزة للفئة B والتي تستدعي طريقة التشغيل للكائن الذي قمت بربطه بـ super بقول super (r) ، لذا فإن طريقة التشغيل لـ a تسمى أولاً وثم تتم طباعة "ThreadB".