多态

一、定义

多态是面向对象的核心。

也叫动态绑定,是指在执行期间(而非编译期间)判断所引用对象的实际类型,并根据引用对象的实际类型来调用相应的方法。

二、必要条件

1.必须有继承;

2.子类必须重写父类的方法;

3.必须有父类引用指向子类对象。

三、内存图解析

1.要点说明:

a. new子类对象时,子类对象中会包着一个父类对象;

b. lady对象中有个Animal类型的变量,实际在new lady,并且为其设置cat值时,该变量会指向cat对象。

c. 在调用lady的pet的“叫”方法时,实际所有的方法都在code seg区域,而pet对象中有个指针会判断该引用的实际类型,并指向该类型对象的方法,即动态绑定。

图片发自简书App


图片发自简书App


四、意义

多态是面向对象的核心,极大的提高了可扩展性(有变动时,不用修改代码)。

例子中,lady的pet是Animal类型,调用pet的“叫”方法时,不用判断Animal的实际类型,来决定调用的方法,多态机制会自动判断实际类型来选择调用的方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,174评论 1 32
  • 第二部分 自动内存管理机制 第二章 java内存异常与内存溢出异常 运行数据区域 程序计数器:当前线程所执行的字节...
    小明oh阅读 1,224评论 0 2
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,914评论 2 9
  • 《深入理解Java虚拟机》笔记_第一遍 先取看完这本书(JVM)后必须掌握的部分。 第一部分 走近 Java 从传...
    xiaogmail阅读 5,235评论 1 34
  • 公司的项目是五六年的老项目了,用的还是MRC,也没用cocoapods,哈哈~,cocoapods集成还是很方便的...
    舒耀阅读 3,265评论 1 1