Javaでクラスのインスタンスを生成するときに継承元と型を一致させなくてもエラーにならないんでしょうか
以下のようなコードを実行したときに、問題なく動作するのと、
A x = new B();
というBのクラスのインスタンスをAのクラスの型として生成しているのにx.f1とy.f1で同じ値になるのが不思議です。
質問としては以下になります。
・クラスもキャストみたいに型を変えて宣言できるのはなぜでしょうか
(仕様だと言われてしまえばそこまでですが、なぜこのようなことがエラーにならないのか、どういったところで役に立つのか等)
・クラスBのインスタンスをAの型で宣言しているのにx.f1は子クラスのメソッドになっているのはおかしいと思うのですがいかがでしょうか。
詳しい方教えていただけますと幸いです。よろしくお願いいたします。
Java
1import java.util.*; 2 3public class Main { 4 5 public static void main(String[] args) throws Exception { 6 // Your code here! 7 8 A x = new B(); 9 B y = new B(); 10 System.out.println(x.f1); 11 System.out.println(x.m1()); 12 System.out.println(y.f1); 13 System.out.println(y.m1()); 14 } 15} 16 17class A { 18 int f1 = 3; 19 20 int m1() { 21 return f1 + 4; 22 } 23} 24 25class B extends A { 26 int m1() { 27 return f1 + 5; 28 } 29} 30
出力結果
2 3 8 2 3 8
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/13 14:28 編集