「Javaのクラスメソッド内でsuperキーワードは使える?」
「Javaのクラスメソッド内でsuperキーワードは使える?」
Java言語仕様(第2版日本語訳初版)(注)の以下の記述をどう解釈するべきでしようか?
「8.4.6継承、オーバーライド、隠蔽」>「8.4.6.2隠蔽(クラス・メソッドによる)」において、staticメソッドがシグネチャが同じスーパークラスのメソッドを隠蔽し、それがインスタンスメソッドであればコンパイルエラーになる、との記述のあと、下記のような記述があります。
『隠蔽されたメソッドは、限定名、あるいはsuperキーワードやスーパークラス型へのキャストを含んだメソッド起動($15.12)を使用することによりアクセスすることができる』
まるで、「インスタンンスメソッドと同じようにクラスメソッドにおいてもsuperキーワードを使用することでスーパークラスのstaticメソッドを呼び出せる」ように読み取れます。
ちなみに該当部分の原典は、
http://java.sun.com/docs/books/jls/download/langspec-2.0.pdfから抜粋
8.4.6.2 Hiding (by Class Methods)
(略)
A hidden method can be accessed by using a qualified name or by using a
method invocation expression (§15.12) that contains the keyword super or a cast
to a superclass type. In this respect, hiding of methods is similar to hiding of
fields.
また、第3版原典も該当部分は同じ記述でした。
http://java.sun.com/docs/books/jls/download/langspec-3.0.pdf
8.4.8.2 Hiding (by Class Methods)
なお、superキーワードについては、同書 15.11.2 「superを使用したスーパークラスのメンバへのアクセス」の項で、
『superキーワードを使用した特殊形式は、インスタンス・メソッド、インスタンス初期化子、コンストラクタ、あるいはクラスのインスタンス変数の初期化子中でのみ有効となる』
とあり、クラスメソッド中では使えないと読み取れます。(続けて、 superとthisの使用条件は全く同じ、としています。)
Javaコンパイラは、クラスメソッド中のstaticキーワードを認識せず、エラーとします。
諸兄のお考えをお聞かせください。
注)http://www.amazon.co.jp/Java%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98-Java-%E3%82%B8%E3%82%A7%E3%83%BC%E3%83%A0%E3%82%BA-%E3%82%B4%E3%82%B9%E3%83%AA%E3%83%B3/dp/4894713063/ref=sr_1_2?ie=UTF8&s=books&qid=1270203134&sr=1-2