- PR -

Thread(Runnableインターフェースを利用した場合)

1
投稿者投稿内容
初芽
会議室デビュー日: 2005/07/03
投稿数: 15
投稿日時: 2005-07-26 14:14
ThreadクラスにRunnableインターフェースを継承したクラスを
Runnableクラス型として渡してスレッドを作成しますが、
この場合、Runnableインターフェースを継承したクラスの情報を持っているのでしょうか?
Runnableクラス型として渡しているので、runメソッドのみしか持っていないということで
よいのでしょうか。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-07-26 16:19
引用:

未記入さんの書き込み (2005-07-26 14:14) より:
この場合、Runnableインターフェースを継承したクラスの情報を持っているのでしょうか?


この文の主語はなんでしょうか。
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2005-07-26 16:35
引用:
この場合、Runnableインターフェースを継承したクラスの情報を持っているのでしょうか?



持ってますよ。ダウンキャストすればインターフェースを実装したクラスに戻せます。
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2005-07-26 16:43
こんにちは。

未記入さんの認識で合っていると思います。

>Runnableクラス型として渡しているので
と、ありますがこの場合「Runnableインターフェースを実装したクラスのインスタンス」を渡していることになります。
インスタンスを受け取ったThreadクラス側ではRunnableインターフェースを実装したクラスという情報しか持っておらず、その実装したクラスが実際に何であるかはわかりません。
ですので、
>runメソッドのみしか持っていない
というよりは、「runメソッドを持っていることのみ保証されている」ことになり、実際Threadクラス側で呼び出すことができるのはrun()メソッドのみになります。
初芽
会議室デビュー日: 2005/07/03
投稿数: 15
投稿日時: 2005-07-26 18:23
ご返信ありがとうございました。
主語はThreadクラスの変数です。
ina
ベテラン
会議室デビュー日: 2005/04/14
投稿数: 58
投稿日時: 2005-07-27 02:33
もう既に皆さんがお答えしていますが、
私も一時期はまったことがあるので、一言。

・クラスなどの参照型はそのオブジェクトのアドレスが保持されている
・クラスのキャストとは型変換では無く、コンパイラに型(クラス・インターフェース)を認識させるものである
 (全く関係ないクラス等へのキャストは実行時にエラーが出ますが....)

ってことを頭にきっちりといれておくと、以下のような考えでスムーズに頭に入ってくれると思います。

 どんな型で渡そうが、結局はそのインスタンスのアドレスは変わらないので実際の中身は一緒のはず。
 ただし、コンパイラはそのインスタンスの「実際のクラス」を知らないので、宣言されているクラスのメソッドしか知らない。
 よって、「実際のクラス」の固有?のメソッドを使いたかったら、コンパイラに「実際のクラス」を教えてあげれば良い。
(と言うことでキャストする)


1

スキルアップ/キャリアアップ(JOB@IT)