多态机制原理解析--从内存角度分析

本文深入探讨了Java中的多态机制,从内存角度解析了为何父类引用可以指向子类对象。通过分析继承、方法表和动态绑定,揭示了多态实现的本质。在内存中,父类的Method被放入Method Table,子类覆盖方法时会更新表项,确保调用的准确性。文章通过实例展示了多态的应用,并提及接口实现多继承的差异。
摘要由CSDN通过智能技术生成

回头看多态,又有了新的认识。
理解多态主要搞清楚以下几个问题就可以了:(以父类Pet,子类Dog为例)
1.为什么可以用表达式 Pet p1= new Dog(); //为什么可以用父类的引用指向子类创建的对象?
2. 当用父类的引用p1,操作子类的对象的时候,为什么可以操作复写(override)的Method,怎么知道该Method是子类的而不是父类的?
3. 当用父类的引用p1操作子类的时候,有哪些限制?

下面进行解答:
理解多态的前提是理解继承(面向对象的三个基本特征:封装、继承、多态)
继承在此不做多的解释,只需要知道两点:1.父类中private 方法或者属性是不能够被继承到子类中;2. 子类实际又两部分组成,一部分是从父类那里copy过来的,还有一部分是自己的。从内存的角度来说,子类在初始化的时候,先初始化继承的那部分,也就是父类的东西(这里的初始化本质可以理解为复制,后面会通过实例进行详细解读),再初始化自己特有的部分。

例如下图,父类Pet中有属性a、还有三种不同类型的sayX方法。子类Dog继承了父类的属性a、public say()以及Protected say1(),还有自己的方法cute。

这里写图片描述

下面说一下多态机制的原理

  1. 执行Pet p1=new Dog(); p1虽然是Pet类型的引用,但实际仍然指向Dog,只是操作范围只有从
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值