黑马程序员技术交流社区

标题: 在多态中成员函数的特点:(需要区分静态函数和非静态 [打印本页]

作者: DDV    时间: 2016-7-11 22:17
标题: 在多态中成员函数的特点:(需要区分静态函数和非静态
在编译时期:参阅引用型变量所属的类中是否有调用的方法如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法
简单总结就是:静态成员函数在多态调用时,编译看左边,运行时看左边。
非静态成员函数在多态调用时,编译看左边,运行时看右边。
以上总结只正对类中的方法来说,如果是针对属性变量,下面再讲解
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
其实这里是多态需要注意一下的地方
准确来说,继承后子类实现要分情况讨论,一般是指没有发生转型的情况下,子类引用接收子类对象,如今发生了向上转型,父类引用接收子类对象,那么在编译和运行的时候,因为左右不统一了,所以要参考左边的类所属变量,这个是比较特殊的情况
结论:
在多态中,成员变量的特点:
无论编译和运行,都参考左边(其实静态和非静态都适用)
在多态中,静态成员函数的特点:(区分静态和非静态)
静态:编译时期,检查参考左边引用变量的类,在运行阶段,还是访问左边
非静态:编译时期,检查参考左边引用变量的类,但在运行阶段,访问的实际上是右边对象中的方法


作者: heimaojyj    时间: 2016-7-25 12:28
多态时,只有成员方法是编译看左边,运行看右边
其他的,都是编译看左边,运行看左边




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2