为什么向上转型后,最后两条应该怎么调用?为什么?谢谢

2024-10-31 07:24:20
有1个网友回答
网友(1):

此问题属于多态问题,需要主要下面两点:

  1. 父类引用指向子类对象的时候,父类引用所能看到的只是属于父类的那部分属性和方法。

  2. 父类引用指向子类对象并且有方法重写的时候,父类方法的地址指向会发生变化(从指向自己类的方法变化为指向创建对象的类所对应的方法)

此程序内存图如下:

关键代码解析:

A a = new B();

属于父类引用指向子类对象

a.print();

变量a实实在在指向对象A(父类对象),所能看到的是父类的方法所对应的地址。由于存在方法重写,所以父类方法的地址指向创建对象的类(B类)所对应的方法,打印B对象属性:2

System.out.println(a.date);

变量a实实在在指向对象A(父类对象),所能看到的是父类的属性:5。