父类引用指向子类对象的时候,父类引用所能看到的只是属于父类的那部分属性和方法。
父类引用指向子类对象并且有方法重写的时候,父类方法的地址指向会发生变化(从指向自己类的方法变化为指向创建对象的类所对应的方法)
此程序内存图如下:
关键代码解析:
A a = new B();
属于父类引用指向子类对象
a.print();
变量a实实在在指向对象A(父类对象),所能看到的是父类的方法所对应的地址。由于存在方法重写,所以父类方法的地址指向创建对象的类(B类)所对应的方法,打印B对象属性:2
System.out.println(a.date);
变量a实实在在指向对象A(父类对象),所能看到的是父类的属性:5。