• ベストアンサー

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メソッドか)を知りたいです。 知っている限りの方法では特定できませんでした。 よろしければアドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • i2719
  • ベストアンサー率35% (11/31)
回答No.2

「thisに表示されたlookメソッドを含まないクラス」の親クラスを たどってEditorクラスまでをリストアップして、 look()メソッドの実装を探せばいいですよ。

japan_3
質問者

補足

アドバイスありがとうございます! ありました。 しかし、Editorクラスのなかでthisを使っているのに なぜ他のクラス名が表示されるのでしょうか?

その他の回答 (2)

noname#33813
noname#33813
回答No.3

thisとは自分を表すものです。 従って、Editorクラスを継承したEditor2クラスをインスタンス化した場合、 Editor2クラスのインスタンスからEditorクラスのメソッドが呼ばれたとしても そのインスタンスはEditor2のものですのでEditor2と表示されます。

japan_3
質問者

お礼

解決です! ありがとうございました。m(_ _)m

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

Abstractクラスなので、実装は別のクラスになりますね。 extends Editor しているクラスを探してみてください。 Abstract Class/Interface については http://javafaq.jp/S015.html を参考に。

japan_3
質問者

お礼

extends Editor で検索したところ恐ろしい数のクラスが出てきました。 No2さんのアドバイスで解決しました。 いずれにせよ、ありがとうございました。m(_ _)m

関連するQ&A