• 締切済み

Javaの問題がわからない

Javaでわからないことがあります。 これの5行目がインスタンスメソッドなのはわかります。3行目はなぜインスタンスメソッドではなくstaticメソッドなのがわからないです。どういう違いですか?

みんなの回答

  • akira1720
  • ベストアンサー率80% (128/159)
回答No.3

MethodB は中身がからっぽ(練習問題の目的とあまり関係ないので省略されている)なので、それを static メソッドして定義しなければいけない必然性についてはこの練習問題の中には書かれていません。ここでは static メソッドとインスタンスメソッドの呼び出し方などについて違いを学ぶのが目的で、どんなときに static メソッドを使うといいかはまた別のところで学ぶのでしょう。 インスタンスメソッドは、そのインスタンスの状態に依存して結果が変わってくるようなものに使います。例えばショッピングカートに入っている商品のリストを返すメソッドだったら、特定のショッピングカートの現在の状態が存在するのが前提ですよね。ショッピングカートクラスに static メソッドとして定義しても、毎回同じ値しか返せないので、役に立ちません。 逆に、static メソッドは、過去の経緯とか前提とか関係なく、同じ引数でそのメソッドを呼んでやると、いつでも同じ結果になるようなものに使います。Java 標準の Math クラスなんかはその典型ですよね。その前でどんな処理をしてようが、誰がショッピングしてようが、Math.sin(0) の結果は常に 0 になります。

  • _kappe_
  • ベストアンサー率68% (1600/2328)
回答No.2

8行目でmethodB()はstaticメソッドだと宣言されています。 staticメソッドを呼ぶときは4行目にあるクラス名.メソッド名()の形が普通ですが、Testクラス内からmethodB()を呼ぶ場合はクラス名.を省略してmethodB()だけで呼ぶことができます。 これに対してmethodC()とmethodD()は9行目・15行目でインスタンスメソッドだと宣言されています。5行目・6行目はどのインスタンスに対してmethodC()やmethodD()を呼ぶのかを指定していないのでエラーになります。12行目はインスタンスメソッド内から同じクラスのインスタンスメソッドの呼び出しなので、インスタンスの指定を省略してmethodD()だけになっています。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

インスタンスメソッドは、何故インスタンスメソッドというのかわかりますか?(質問を見る限りわかってなさそうなんだけど)