OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

クラス変数とクラスメソッドを教えてください

  • 暇なときにでも
  • 質問No.188680
  • 閲覧数167
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 95% (213/222)

みんさんどうもすみません。クラス変数とクラスメソッドなんですが、
何回本を読んでもイマイチ理解できません。クラス変数とクラスメソッド
を使うことでなにがメリットなのか教えてください。例えばクラスメソッド
の場合はメソッド名の前にオブジェクト名をつけなくていいとか、そういう
便利さのために使うんでしょうか?どうもまだ完全に理解できていないの
で詳しい方いらっしゃったらどうか教えてください。よろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル7

ベストアンサー率 66% (6/9)

 クラスメソッドのメリット、ですか。まともに解説しようとするとなかなか難しいものですね。

 順番に考えてみましょう。
 クラスメソッドでないメソッドといえば、インスタンスメソッドです(これは普通に使うと思いますが)。
 インスタンスメソッドは、インスタンスを操作するためのメソッドです。
 同じように、クラスメソッドは、クラスを操作するためのメソッドです。
 要は「メソッド」とは、何かの対象を操作するものであって、その対象がインスタンスなのかクラスなのかという違いです。

 おそらくこのぐらいの解説はどこにでもあると思うのですが、ピンと来ないのは、「クラスを操作する」と言われてもイメージがわかないからでしょう。

 そこで、具体的な例を考えてみます。
 ある銀行が、変動金利でお金を貸しているとします。金利はある基準金利+1%で決まるとします。その場合、この銀行には、

  ひとつの「融資」クラスと、
  複数の「融資」インスタンス

 があることでしょう。この場合、「基準金利」はクラス変数であり、「基準金利を設定する」メソッドはクラスメソッドとするのが自然です。クラスメソッドで基準金利を設定すると、そのクラスのすべての融資インスタンスの金利が、その基準金利を元に再計算されることでしょう。

 こういうふうに、個別のインスタンスではなく、同じクラスのすべてのインスタンスに共通に影響するようなパラメータをクラス変数とし、それを操作するメソッドをクラスメソッドにする、のがクラスメソッドの主要な用途です。

 ただ、同じようなことをクラスメソッドを使わずに実装することももちろん可能です。今の例でいえば、基準金利自体をひとつのクラスとして切り出してしまい、融資インスタンスが基準金利インスタンスを参照するような設計も可能でしょう。
 たとえば、「顧客のランクによって3種類の異なる基準金利を適用したい」というような場合はそうするほうがよいかもしれません。

 どちらがよいかは、ま、好きなほうを使えばよいのではないでしょうか。
お礼コメント
yamitsu

お礼率 95% (213/222)

Snowmanさんアドバイスありがとうございました。特に

「個別のインスタンスではなく、同じクラスのすべてのインスタンスに共通に影響するようなパラメータをクラス変数とし、それを操作するメソッドをクラスメソッドにする、のがクラスメソッドの主要な用途です。 」

の部分がとてもわかりやすかったです。もう一度
クラス変数とクラスメソッドを勉強してみたいと思いました。
まだ完全には理解できていないとは思うんですが、少しづつ
でも進歩したいと思っております。本当にありがとうござい
ました。またなんかあったときはよろしくお願いします。
投稿日時 - 2001-12-24 18:57:49
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル10

ベストアンサー率 28% (33/117)

クラスメソッドというのが良く分かりませんが、それはstaticメソッドのことでしょうか・・・ 私はどんなクラスからも便利使いされるようなロジックをstaticメソッドにします。例えばtrimをするときに、NullPointerExceptionを出さないようにこんなメソッドを作ります。 public class UtilBean{ public static final String tr ...続きを読む
クラスメソッドというのが良く分かりませんが、それはstaticメソッドのことでしょうか・・・

私はどんなクラスからも便利使いされるようなロジックをstaticメソッドにします。例えばtrimをするときに、NullPointerExceptionを出さないようにこんなメソッドを作ります。

public class UtilBean{
public static final String trim(String s,Object tmp){
try{
s.trim();
}catch(Exception e){
//sがnullならここに来ます
return tmp;
}
}
}

これを各クラスごとにメソッドを作ったら大変です。親クラスに一つ持つことも考えられますが、全く関係ないクラスどうしで、同じ親クラスを持つことが不可能なこともあります。そこで、staticメソッドにして一つのクラス(UtilBean)にまとめてしまうのです。

どうですか?なんとなくわかっていただけましたか?
static変数はカウンターとかを考えると分かりやすいですよね。
きっとだれかがまた解説してくれるでしょう。
お礼コメント
yamitsu

お礼率 95% (213/222)

kuro_73さん貴重なアドバイスありがとうございました。
確かにstaticメソッドで一つのクラスにまとめてしまう
というやり方もあるんだなっていうのがわかりました。
これからなにかあったときは今回のkuro_73さんの
アドバイスを思い出して使えたらなって思いました。
今回は本当にありがとうございました。
投稿日時 - 2001-12-24 19:02:05


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ