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

[jfriends-ml 10882] Re: インターフェ ースについて



村山@netgeneです.
お返事ありがとうございます。(ところで返信アドレスが個人になってる気がします)

> 質問ですが、
> インターフェースにstaticメソッドを規定できないのはなぜでしょうか?
インターフェースは全て抽象メソッドで,それを実装したクラスで
オーバーライドするのが前提だからではないでしょうか.オーバーライド
できないメソッドが定義できても意味がないので,そのようなことが
最初から許されていない.
通常はstaticメソッドはクラスに紐づくので無理ですが、インターフェースの
staticメソッドの場合はそのインターフェースを実装したクラスに
そのstaticメソッドを実装されている事を保証してほしかったな・・と思います。
余談ですが
C#の場合staticフィールドはインスタンス変数から参照できません。
例:
--C#--
public class Hoge{
  public static String TABLE_NAME = "hoge";
}
public class Test{
  public static void main(String[] args){
    Hoge hoge = new Hoge();
    hoge.TABLE_NAME;///←ここでエラー
  }
}
理由は多分staticフィールドはクラスに紐づくものなので
インスタンス変数からは参照できない・・という理由だと思います。
でもとっても不便です。


> 例:DBのエンティティクラスを作成していてgetTableName()をstaticで保証
> したいときなど・・
staticメソッドではポリモフィズムが効かないはずですよね.
#隠蔽はされるけど,オーバーロードはされない,かな?
##うーん,やっぱり言語仕様を見直さないと,正確なことは言えませんね.

だからこういうことは多分できないと思います.

> 読書会にしばらく出ていない新井です。
> (日本語のになったら出席しようと目論んでいます)
#次回が日本語になるという保証さえありませんよ.(^^;
が〜ん・・・そりゃそうですよね・・