说到底,并没有给出可以通过代码检查的理解。 1 .如果子类不覆盖某个方法,则父类引用将调用父类自身的旧方法。 2 .如果子类覆盖了某个方法,则父类引用将调用子类重定义的新方法。 3 .如果子类覆盖了某个属性,则父类引用调用父类自身的旧属性。 4 .子类必须覆盖某个属性,父类引用调用父类自身的旧属性5 .父类引用无法访问子类新定义的属性和方法。 这里有关于Java多态性的原理和特性,可以理解如下,但仅凭个人的理解,可以通过这个猜测来理解,但实际实现原理并不一定是错误的想法,看到了对jvm内容的修改
jvm在堆栈中创建父类的类型引用,包括所有父类的方法和属性;
jvm在堆中创建子类对象,包括子类属性方法、父类属性方法;
子类改写的方法是置换了父类方法(类方法、变量不能改写)。
jvm基于匹配模式允许栈中的引用指向堆中的对象,但栈中的父类引用与子类对象兼容,因此对象引用可以是父类的属性、父类的方法或子类
以前4个条件为前提,可以理解为什么多态性具有以上特性。
最后补充:以上发言为个人猜测和理解,不能保证原理是这样的,作为帮助理解3358www.Sina.com/的一种方法详情请参照相关书籍。