実現したいこと
実行結果がなぜ
Super : x
Super : y
Sub:methodA()
Sub : methodB()
でなく
Super : x
Super : y
Super:methodA() //ここがわからない
Sub : methodB()
になるか知りたい
前提
スーパークラスのメソッドを呼び出した時、継承関係にある場合は子クラスのメソッドが使用されると思って思っていたのですがそもそもそれが間違っているかも。
staticメソッドとインスタンスメソッドで継承についての違いがあるんですかね
発生している問題・エラーメッセージ
The static field Super.x should be accessed in a static way The static method methodA() from the type Super should be accessed in a static way
該当のソースコード
class Super { static String x = "Super : x"; String y = "Super : y"; static void methodA() { System.out.println("Super:methodA()"); } void methodB() { System.out.println("Super:methodB()"); } } class Sub extends Super { static String x = "Sub: x"; String y = "Sub: y"; static void methodA() { System.out.println("Sub : methodA()"); } void methodB() { System.out.println("Sub : methodB()"); } } public class Main { public static void main(String[] args) { Super obj = new Sub(); System.out.println(obj.x); System.out.println(obj.y); obj.methodA(); obj.methodB(); } } 実行結果 Super : x Super : y Super:methodA() Sub : methodB()
初めてで至らない点もありますがよろしくお願いいたします。
徹底攻略Java SE 11 Silver問題集 P.341

回答1件
あなたの回答
tips
プレビュー