- - PR -
Thread(Runnableインターフェースを利用した場合)
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-07-26 14:14
ThreadクラスにRunnableインターフェースを継承したクラスを
Runnableクラス型として渡してスレッドを作成しますが、 この場合、Runnableインターフェースを継承したクラスの情報を持っているのでしょうか? Runnableクラス型として渡しているので、runメソッドのみしか持っていないということで よいのでしょうか。 | ||||
|
投稿日時: 2005-07-26 16:19
この文の主語はなんでしょうか。 | ||||
|
投稿日時: 2005-07-26 16:35
持ってますよ。ダウンキャストすればインターフェースを実装したクラスに戻せます。 | ||||
|
投稿日時: 2005-07-26 16:43
こんにちは。
未記入さんの認識で合っていると思います。 >Runnableクラス型として渡しているので と、ありますがこの場合「Runnableインターフェースを実装したクラスのインスタンス」を渡していることになります。 インスタンスを受け取ったThreadクラス側ではRunnableインターフェースを実装したクラスという情報しか持っておらず、その実装したクラスが実際に何であるかはわかりません。 ですので、 >runメソッドのみしか持っていない というよりは、「runメソッドを持っていることのみ保証されている」ことになり、実際Threadクラス側で呼び出すことができるのはrun()メソッドのみになります。 | ||||
|
投稿日時: 2005-07-26 18:23
ご返信ありがとうございました。
主語はThreadクラスの変数です。 | ||||
|
投稿日時: 2005-07-27 02:33
もう既に皆さんがお答えしていますが、
私も一時期はまったことがあるので、一言。 ・クラスなどの参照型はそのオブジェクトのアドレスが保持されている ・クラスのキャストとは型変換では無く、コンパイラに型(クラス・インターフェース)を認識させるものである (全く関係ないクラス等へのキャストは実行時にエラーが出ますが....) ってことを頭にきっちりといれておくと、以下のような考えでスムーズに頭に入ってくれると思います。 どんな型で渡そうが、結局はそのインスタンスのアドレスは変わらないので実際の中身は一緒のはず。 ただし、コンパイラはそのインスタンスの「実際のクラス」を知らないので、宣言されているクラスのメソッドしか知らない。 よって、「実際のクラス」の固有?のメソッドを使いたかったら、コンパイラに「実際のクラス」を教えてあげれば良い。 (と言うことでキャストする) |
1