I don't know the exact reason, but judging by the output, it is because the Thread1 class overrides the run method of
Thread class. What the run method of Thread class do is check if this thread was created using a runnable by checking if a private instance of Runnable in Thread class is null or not. If it is not null, then it would call the run method of that object otherwise it would do nothing.
But in this case, the run method of the overriding class Thread1 class is invoked, so it doesn't do this check and directly displays Thread1.run()
This is what I feel but I may be wrong as this is just a prediction...