Java 从内存剖析多态性

多态中 为什么父类引用变量引用子类对象时

若父类和子类中出现同名变量 该引用变量仍能调用父类的变量
而同名函数则出现覆盖现象

试从内存角度分析 谢谢

变量在类加载的时候开始初始化,肯定是父类变量先进入内存
方法调用时先从本类寻找,寻找不到再从父类寻找,本类同名方法进去内存,父类同名方法就不会进入内存,所以就覆盖了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-27

首先,变量并不具有多态性,域访问的操作将被编译器解析。

    子类是参考父类才能被构造出来,父类的变量和方法必然在子类中被保存下来,也就是说,子类中有父类的成员变量A,也可以有自己成员变量a,而他们不是一个概念,即使他们碰巧名字相同,也不是同一个东西。当父类引用指向子类对象的时候,这个引用看到的当然只是它自己的A.同理,子类中虽然有父类的变量A,但是如果子类想要调用,它只能通过super才能拿得到父类的这个变量。

    java的多态即运行时绑定,而java中除了用static和final可以关闭多态性,其他的都是运行时才被决定调用谁,即使你使用static或final来关闭掉多态,当你这个引用被当成父类来用时,虽然它指向的是子类对象,但现在它表示的是父类,所以它也只认识自己的成员变量。

本回答被网友采纳
相似回答