- ベストアンサー
インスタンスメソドと静的メソドの区別
- インスタンスメソドはクラスのインスタンスに、静的メソドはクラスそのものに対して働きます。
- インスタンスメソドと静的メソドは相反するものではなく、複雑に関係しあっています。
- 参考書の説明には間違いがある可能性があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> getSize()メソドには対象とするインスタンスが記述されていません。 対象とするインスタンスはthisです。thisは、一般的には省略することができます。 下の二つのステートメントは同じ処理を表します。 Dimension d = getSize(); Dimension d = this.getSize();
その他の回答 (2)
- ranx
- ベストアンサー率24% (357/1463)
> 私の使っている参考書には"java.util.Calendar"classのインスタンスメソド例として、 > static Calendar getInstance() > のように修飾子staticのついたものをインスタンスメソドと明記して紹介してある部分があります。 これは間違いだと思います。このメソッドを使う際に、わざわざCalendarクラスのインスタンスを 用意する必要は無いからです。これはクラスメソッドです。 > getSize()メソドの例がありました。私の解釈ではこれは静的メソドで、"java.awt.Component"classのgetSize()メソドを > "Applet"classが継 承して使っているのだと思うのですが 継承に関する理解は合っていますが、これはやはりインスタンスメソッドです。クラスメソッドは個々のインスタンスの 変数を扱うことはありません。すべてのComponentに共通のサイズなどというものはありませんから、これをクラスメソッド としたのでは意味がなくなります。
補足
>> static Calendar getInstance() >> のように修飾子staticのついたものをインスタンスメソドと明記して紹介 >これは間違いだと思います。 やはり間違いですか。しかしこの参考書にはこのような例がいくつかあって混乱してしまいました。 > すべてのComponentに共通のサイズなどというものはありませんから、これ > をクラスメソッドとしたのでは意味がなくなります。 大変参考になりました。しかしgetSize()メソドには対象とするインスタンスが記述されていません。現在のアプレットのコンポーネントであることは自明かもしれませんが・・・。インスタンスメソドで対象とするインスタンスを明示しない使い方は他にも例がありますか? 勉強不足な私の質問に答えていただいてありがとうございました。
- wolv
- ベストアンサー率37% (376/1001)
Javaはそれほど詳しくないので勘違いしているかもしれませんが, インスタンス・メソッドとクラス・メソッドは, 文法における違いはないんじゃないでしょうか. ただし,呼び出すときに(下例参照), 1. aの部分にインスタンスを指定しないと意味がなく, a内の変数を参照したり作用したりするメソッドが インスタンス・メソッド, 2. クラス変数を参照したり作用したりする, あるいは, 便宜上そのクラスで定義されているが, そのクラスの変数を参照したり作用しないもの などがクラス・メソッド ということです. a.method(b) ただし,記述上, クラスメソッドの呼び出し時の「.」の左側には, そのクラスのインスタンスを書いてもよいが, 混乱を避けるため,通常はクラス名を書く. という慣習はあります.
補足
なるほど。静的メソドをクラスのインスタンスに結びつけることもありますね。 でも逆に、前述のgetSize()の例のようにインスタンスメソドを静的メソドのような文法で使えるのでしょうか?それともこの文法を静的メソド風?だと判断したことが間違っているのでしょうか?? やはりよくわかりません。・・・とりあえずありがとうございました~。
お礼
<this>でしたか。 今更ながらにその存在を思い出しました。 恥ずかしいくらい簡単な話でした~。 どうもすみません。ありがとうございました。