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