返回介绍

11.20 多态性:动态方法查找

发布于 2020-09-09 22:55:49 字数 802 浏览 1032 评论 0 收藏 0

多态性使得超类中的一个变量能够保存子类对象,并且能够直接从超类变量中引用这些子类的方法。考虑一个例子,假设Packet对象的基类BasePacket通过虚拟函数定义了通常由它的子类使用的所有公开方法(例如sendreceiveprint等)。这时,尽管BasePacket是抽象的,它仍然可以用来声明一个变量:

BasePacket packets[100];

现在,我们可以产生不同包对象的实例,并将它们放入到数组当中:

EtherPacket ep = new;  // extends BasePacket
TokenPacket tp = new;  // extends BasePacket
GPSSPacket gp = new;   // extends EtherPacket
packets[0] = ep;
packets[1] = tp;
packets[2] = gp;

如果数据类型为诸如整数、位和字符串子类的数据类型,那么所有的这些类型都不能被存储到一个单一数组中。然而,使用多态性,这个功能就能够实现。在这个例子中,由于方法被声明成虚拟的,所以可以从超类变量中访问恰当的子类方法,即使编译器在编译的时候并不知道它将要加载哪一个方法。

例如,对于packets[1]

packets[1].send();

应该调用与TokenPacket类相关联的send方法。在运行的时候,系统能够从合适的类中正确地绑定方法。

这就是多态性工作的一个典型例子,它比非面向对象的框架提供更为强大的能力。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文