A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在编译时期:参阅引用型变量所属的类中是否有调用的方法如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法
简单总结就是:静态成员函数在多态调用时,编译看左边,运行时看左边。
非静态成员函数在多态调用时,编译看左边,运行时看右边。
以上总结只正对类中的方法来说,如果是针对属性变量,下面再讲解
class Fu
{
static int num = 5;
}
class Zi extends Fu
{
static int num = 8;
}
class  DuoTaiDemo4
{
public static void main(String[] args)
{
Fu f = new Zi();//父类引用接收子类对象
System.out.println(f.num);//输出结果为父类的nun
Zi z = new Zi();
System.out.println(z.num);
}
}
这个的输出是:
5
8
其实这里是多态需要注意一下的地方
准确来说,继承后子类实现要分情况讨论,一般是指没有发生转型的情况下,子类引用接收子类对象,如今发生了向上转型,父类引用接收子类对象,那么在编译和运行的时候,因为左右不统一了,所以要参考左边的类所属变量,这个是比较特殊的情况
结论:
在多态中,成员变量的特点:
无论编译和运行,都参考左边(其实静态和非静态都适用)
在多态中,静态成员函数的特点:(区分静态和非静态)
静态:编译时期,检查参考左边引用变量的类,在运行阶段,还是访问左边
非静态:编译时期,检查参考左边引用变量的类,但在运行阶段,访问的实际上是右边对象中的方法

1 个回复

正序浏览
多态时,只有成员方法是编译看左边,运行看右边
其他的,都是编译看左边,运行看左边
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马