Java silverの勉強をしています。
以下のコードを御覧ください。
A
1public class A { 2 String imA = "aaa"; 3 public void sayA() { 4 System.out.println("sayA"); 5 } 6}
B
1public class B extends A { 2 String imB = "bbb"; 3 4 public void toB() { 5 System.out.println("sayB"); 6 } 7}
main
1public class Main { 2 3 public static void main(String[] args) { 4 5 A a = new B(); 6 System.out.println(a.imA); 7 } 8 9}
上記のように、Aを継承したBがあります。※すべて同一のパッケージとします。
疑問点
A a = new B();
このインスタンス化時、A型で宣言されているので呼び出せるフィールドやメソッドはクラスAに記載されているものだと思います。
ここでわからないのはインスタンス宣言のnew B();が変数aに及ぼせる影響範囲です。
インスタンスはクラスの設計図から作られた製品だとはよく記述がありますが、メソッドやフィールドはあくまでもクラス型に左右されている様に思えます。
クラスBにオーバーライドがあればメソッドを上書きできるのでしょうが、new B();のインスタンスは変数aにどのような情報を渡しているのでしょうか?
・この様にクラスBに記述すればString imBにアクセスできる。
・このような情報を渡している。
など、お教えいただけると嬉しいです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー