過去の日記

2008-12-22 [長年日記]

空白だけの言語 [気になる本][Ruby]

あーどこかで見たかも。

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

  • 作者: 原 悠
  • 出版社/メーカー: 毎日コミュニケーションズ
  • 発売: 2008-12-20
  • ASIN: 4839927847
  • メディア: 単行本(ソフトカバー)
  • amazon.co.jp詳細へ

(BK1内容説明より)
8つの記号しかない言語や、空白だけで構成される言語など、奇妙な言語(Esoteric Language)があるのを知っていますか? このような言語を題材にプログラミング言語の作り方を詳しく解説します。

今買わないときっと入手できなくなるんだろうなぁ。
でも買うかなぁ。
ちょっと悩む。

鋼の錬金術師 21 [comic]

お母さんの遺言にそんな解釈があったとは! 不覚。

鋼の錬金術師 21 (ガンガンコミックス)

  • 作者: 荒川 弘
  • 出版社/メーカー: スクウェア・エニックス
  • 発売: 2008-12-22
  • ASIN: 4757524390
  • メディア: コミック
  • amazon.co.jp詳細へ

Javaにおいてstaticなメソッドがabstractであるはずがないからである [java]

というGoogle検索からのrefererが。

Javaにおいてstaticなメソッドがabstractであるはずがないからである - Google 検索


あるはずがないよなぁ。

public class Main {
    public static void main(String[] args) {
        A a = new AA();

        a.print();
    }
}
public class A {
    public static void print() {
        System.out.println("A");
    }
}
public class AA extends A {
    public static void print() {
        System.out.println("AA");
    }
}


さて、Mainを実行した時の結果は? という質問に答えられるなら分かるはず。
答えは、A。
a.print(); で呼び出されるメソッドは実行時に動的に(dynamic)決まるわけではない。
コンパイル時点で、静的に(static)決まる。
実行時に変数が参照しているインスタンスじゃなくて、変数の型で決定されるわけだ。

つまり継承も多態もない。
なので、abstract な staticメソッドはありえない。


ところで、

    public static void main(String[] args) {
        A a = null;

        a.print();
    }

としても、全く問題なく実行できる。
インスタンスと関係なく、Aのstaicメソッドが呼び出されるので、これでもいいのだ。