2008-12-22 [長年日記]
■空白だけの言語
あーどこかで見たかも。
(BK1内容説明より)
8つの記号しかない言語や、空白だけで構成される言語など、奇妙な言語(Esoteric Language)があるのを知っていますか? このような言語を題材にプログラミング言語の作り方を詳しく解説します。
今買わないときっと入手できなくなるんだろうなぁ。
でも買うかなぁ。
ちょっと悩む。
■Javaにおいてstaticなメソッドがabstractであるはずがないからである
というGoogle検索からのrefererが。
あるはずがないよなぁ。
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メソッドが呼び出されるので、これでもいいのだ。