Threadクラスのrun()メソッドをカスタマイズします.super()です.runの理解


Threadクラスのrunメソッドを書き換えると、このようなコードがよく見られます.
    public void run() {
        super.run();
        System.out.println(Thread.currentThread().getName());
    }

このsuper()はいったい何の役に立つのでしょうか.まず、Threadクラスの実装を見てみましょう.
    private Runnable target;

    public Thread(Runnable target) {
        init(null, target, "Thread-" + nextThreadNum(), 0);
    }

    @Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }

上の図から,Threadクラスのコンストラクション関数を用いて,Runnableインタフェースを独自に実装し,Thread(Runnable target)コンストラクション関数を用いてrun()メソッドを書き換えることで,我々が必要とする機能を実現できることを解析した.では、このsuper()を私たち自身のMyThreadに書き込むのはどんな役割を果たすのでしょうか.
public class MyThread extends Thread {

    MyThread(Runnable runnable) {
        super(runnable);
    }

    public void run() {
        super.run();
        System.out.println(Thread.currentThread().getName());
    }
}

実装したMyThreadクラスにrunnableを受け入れるコンストラクション関数を追加し、Runnableインタフェースで現在のスレッドを印刷(MyThreadの印刷と一致)し、コードテストを行います.
public class MyThreadTest {

    public static void main(String[] args ) {
        Runnable runnable = new MyRunnable();
        MyThread myThread = new MyThread(runnable);
        myThread.start();
        System.out.println(Thread.currentThread().getName());
    }
}

テスト結果は次のとおりです.
main
Thread-0
Thread-0

MyRunnableのrun()とMyThreadクラスのrun()は同じスレッドで、両方の関数が実行されます.