2016-05-13 13 views
2

runメソッドを拡張するときに、それがthreadクラスをオーバーライドする必要があるのはなぜですか。私がクラスを拡張するときにわかっている限り、抽象メソッドをオーバーライドします。しかし、runメソッドの定義はpublic void main()です。なぜそれを上書きすることが必須ですか?スレッドクラスを継承するrun()メソッドをオーバーライドする必要がある理由

答えて

1

スレッドの本質は、それが何かを実行しているということです。だから、スレッド抽象化は自然に実行するために何かを提供する必要があります。これはJavaで、run()を実装することによって実現されます。

0

https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#run()

スレッドはRunnableを実装し、それがどのような実装を持っていないrun()メソッドを持っているので、あなたがThreadクラスを拡張したがって

(彼らはあなたが欲しいものを予測することはできませんが、「実行」へ)

PS:スレッドクラスを拡張するクラスを作成し、run()メソッドをオーバーライドしないでください。javaはエラーをスローしませんが、スレッドを開始すると、空の実装を実行するだけです(したがって基本的には何もありません)

0

何らかの目的でスレッドを作成しているとき。その目的を達成するには、コードを書く必要があります。

クラスでは、実装は何もしません。目的を達成するために独自のロジックを追加しました。単にrun()をあなたのロジックに書いてください。

は今、あなたはJavaは、その後、我々はクラスを拡張する場合Why is Thread not an abstract class and start() not final?

0

を投稿参照してください。抽象メソッドとしてこのrun()を維持しなかった理由という疑問を持っている場合、我々は単に抽象メソッドをオーバーライドしません。オーバーライドは、子クラスに特定の親クラスメソッドのより具体的な実装を提供する必要があるときに行うことです。私たちがスレッドクラスを拡張するときにrunをオーバーライドする理由は、コードの一部をマルチスレッドの方法で実行することです。そこで、Javaの作成者は、オーバーライドされるメソッドの名前に合意しました。それ以外の場合は、すべての開発者がメソッドの独自の名前を使用し、コンパイラはマルチスレッドコードの場所を知りません。

関連する問題