staticメソッドの継承関係での再定義とその呼び出しについて
解決したいこと
今年からJavaを学び始めた者です。
JavaSilver向けの問題集を解いている際に疑問に思った事があります。
問題集に以下のようなコードが出てきました。
この問題として出題されたコードの結果がなぜ以下に記載したようになるのかがわかりません。
試験で点を取るだけであればそういうものだと理解してスルーすればよいと思うのですが、どうにも引っかかってしまいまして...
どなたか、お教えいただけると幸いです。
問題
class A {
static void method(){
System.out.println("A");
}
}
class B extends A {
static void method(){
System.out.println("B");
}
}
public class Main{
public static void main(String[] args){
A obj = new B();
obj.method();
}
}
出力結果
A
参考書の解説
参考書の解説ですと、
「スーパークラスで定義したstatic変数、インスタンス変数、staticメソッド、インスタンスメソッドをサブクラス側で再定義することは可能ですが、サブクラスオブジェクトをスーパークラス型の変数に代入している場合、インスタンスメソッド以外はスーパークラスが呼び出される」
とのことで、処理の動きの解説があるだけで、なぜこのような処理になるのかの解説はありませんでした。
自分で思っていた処理
クラスAとクラスBのメソッドがstaticメソッドでない場合と同様の動きをして、結果として「B」を出力するのかなぁと思いつつ問題を解いていました。