- ベストアンサー
abstractメソッドの使い方
漠然とした質問になりますが、よろしくお願いします。 今、前の人が記述したソースを読んでおりまして、 抽象クラスのメソッドの使い方で疑問が生じました。 lookメソッドに注目して頂きたいのですが、 public abstract class Editor { protected abstract boolean look() throws Exception; ・・・・・・・・・・・・ if(! this.look()) { // ★ return false; } という記述があります。Editor クラスにはこの2つ以外のlookメソッドはありません。 そのためlook()では他のクラスで実装した戻り値が返ってくるはずですが、 thisを監視してデバックすると★の行上に処理のラインが来たとき、 thisにlookメソッドを含まないクラス名が表示されます。 thisがEditor でない事自体よく分かりません・・ abstractはあまり使ったことが無く、どこで実装されているのか(正確には、実装されているクラスのうちここで使われているのはどのクラスのlookメソッドか)を知りたいです。 知っている限りの方法では特定できませんでした。 よろしければアドバイスをお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「thisに表示されたlookメソッドを含まないクラス」の親クラスを たどってEditorクラスまでをリストアップして、 look()メソッドの実装を探せばいいですよ。
その他の回答 (2)
thisとは自分を表すものです。 従って、Editorクラスを継承したEditor2クラスをインスタンス化した場合、 Editor2クラスのインスタンスからEditorクラスのメソッドが呼ばれたとしても そのインスタンスはEditor2のものですのでEditor2と表示されます。
お礼
解決です! ありがとうございました。m(_ _)m
- PED02744
- ベストアンサー率40% (157/390)
Abstractクラスなので、実装は別のクラスになりますね。 extends Editor しているクラスを探してみてください。 Abstract Class/Interface については http://javafaq.jp/S015.html を参考に。
お礼
extends Editor で検索したところ恐ろしい数のクラスが出てきました。 No2さんのアドバイスで解決しました。 いずれにせよ、ありがとうございました。m(_ _)m
補足
アドバイスありがとうございます! ありました。 しかし、Editorクラスのなかでthisを使っているのに なぜ他のクラス名が表示されるのでしょうか?