[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] 抽象クラス(was Re: staticの使い方(メソッド))




前橋です。

西沢さん:
>気持ちはわからないでもないですが、どのクラスでも使うメソッドや
>変数なら抽象クラスに実装する方がスマートですね。
>
>ex.
>クラスメソッドの場合 => int c = MyClass.calc(a, b);
>抽象クラスに実装済みの場合 => int c = calc(a, b)
>
>ちょっと強引な例ですがクラス名を書かなくて済みます。

あのー、これはもしかして、そういう抽象クラスを継承するという
ことでしょうか?

もしそうでなかったらごめんなさい。以下、上記の前提で話を進め
ますが、

単一継承しか許していないJavaで、「よく使う」という理由だけで
継承を使っちゃったら困りませんか? 継承はやっぱり、is aの関係
があるときだけにしないと...

読書会には出ていませんが、Peter Coadの「Javaオブジェクト設計」
の「継承のチェックポイント」にも、

 4.ユーティリティクラス(何度も利用したい便利な機能を持つクラ
   ス)に過ぎないクラスをサブクラス化するのではない。

と書いてありますし...

似た話で、Cでいうところの#defineをJavaで書きたいとき、整数型
ならstatic final int を使うわけですが、たいていこういうのは、
あっちこっちで参照するので、それだけ固めたinterfaceを作ると
いう技があります。

interface Constants {
    static final int HOGE = 1;
    static final int PIYO = 2;
    ...
}

で、これを使うときですが、

使う側のクラスで、Constantsをimplementsしてしまえば、いちい
ち Constants.HOGE のように書かなくて済みます。これはインタフェー
スなので、単一継承に縛られる必要もありません。

でも、これって、私はとっても裏技チックのような気がするのです
けど、みなさんどうお考えでしょう?

------------------------------------------------------------
  前橋 和弥                             maebashi@xxxxxxxxxx
  中部ソフトエンジニアリング(株)
    〒450 名古屋市中村区名駅4-10-25(名駅IMAIビル 5F)
    Tel:(052)583-4511(代) 内線 252 Fax:(052)583-4566
------------------------------------------------------------