讨论/《面向对象是怎样工作的(第 2 版)》 - 2.4 多态让消息的发送方法通用/
《面向对象是怎样工作的(第 2 版)》 - 2.4 多态让消息的发送方法通用
共 26 个回复

读书节笔记征集活动已圆满结束,感谢所有参与本次活动的扣友们。大家在今后的日子里也要多读书读好书鸭~力扣会在职业提升和技能成长之路上一直陪伴大家,欢迎大家随时给我们提宝贵建议。💪

我们对参与讨论的扣友进行了认真评选,在此恭喜以下扣友获得奖励 🎁 , 请大家留意站内信通知并填写收货地址,我们将在所有收货地址信息统计完毕后进行发放。 预计 25 个工作日左右,请耐心等待。

恭喜以下扣友获得图灵教育赠送的程序员必读书籍 x 1!
@wu-gq
@vir-u
@liberg
@raymond_yp
@be-yourself-5
@ji-ding
@she-hui-di-ceng-ren
@LosReturn
@mc3366
@zitt
@lindsaywong

4

文章中介绍的主要是动态多态,也叫做运行时多态,主要实现方式是继承+重写
另外补充一下静态多态的概念,或者说编译期多态,例如方法重载、泛型编程都是静态多态的实现形式。
两者最主要的差别就是调用决议时机不同。动态多态具体调用哪个类的方法的时机在运行期决议,而静态多态在编译期完成。

  • 《Modern C++ Design》
    11.1 What Are Multimethods?
In C++, polymorphism essentially means that a given function call can be bound to different implementations, depending on compile-time or runtime contextual issues.
Two types of polymorphism are implemented in C++:
* Compile-time polymorphism, supported by overloading and template functions
* Runtime polymorphism, implemented with virtual functions
22

面向对象的三大特性:封装、继承、多态,其中多态经常会被问到,那什么是多态?正如本节内容,多态就是在相同行为下的不同表示。
而当有多个目标对象都有相同的行为时,通常又会将他们的相同行为抽象出一个基类出来,而外部在使用时可以直接通过基类指针指向可能不确定具体类型的对象,但因为他们有共同的行为所以外部使用时完全不用考虑其实现细节。

如果说封装使得面向对象能隐藏对象内部方法细节,继承提取公共属性和行为形成公共基类,那多态就类似提供了一个标准接口,在继承下又可以通过这个标准接口扩展不同的特性

13

如果用C++的话,需要注意的是只有基类的指针或引用才能触发多态,这部分内容在《深度探索C++对象模型》的第一章有详细介绍。

4

多态是一种抽象的设计,使用的是自顶而下的编程思想。在实际开发中,我们需要优先考虑好业务的抽象,才能设计出合适的结构和方法。

3

What does the fox says?

莫名想到这首英文歌。。感觉这个各种动物叫也可以抽象成Animal.says()的多态

2

实现要点:基类通常被定义为抽象类,其中声明了抽象方法,而没有具体实现。子类继承基类之后,实现抽象方法,不同子类有不同的实现方式,即所谓“多态”

2

「多态最根本的作用就是通过把过程化的条件分支语句转换为对象的多态性,从而消除这些条件分支语句」,出自《JavaScript 设计模式与开发实践》 。
对于上面的例子,可以理解为在 object instanceof Animal 的前提下再次判断 if object instanceof Baby then return '哇'

1

个人理解在这篇文章中:多态的意义就是将 教练 执行 cry的行为,下放到了各个动物的手里。从而达到了业务与代码实现的分层。更好理解的同时,部分细节还得到了‘抽象’。

1

说实话, 我在看这篇文章的时候, 脑海中一直在想, Linux之父狂喷C++的事, 他说"C++是世界上最烂的语言, C是最棒的"(大概意思是这样)
emmmmmmm
元芳, 你怎么看?

1