返回介绍

多态

发布于 2024-01-08 20:55:53 字数 4562 浏览 0 评论 0 收藏 0

多态,就是说多种形态。

例如在之前的手机例子中,手机就拥有多种形态,一种形态能发短信,另一种形态不能发短信。但总的来说,它们都属于手机,它们都具备手机共有的功能:开机和打电话。

在代码中,我们可以把子类实例存放到父类类型的变量中,并且可以根据父类中的成员名称访问子类的成员:

var 某人的手机:手机 = 新手机.new()

某人的手机.打电话("10086")   
# 虽然 某人的手机 是手机类型,但其值是新手机,所以调用的是新手机的打电话方法。

# 某人的手机.发短信("10086","Hello")
# 上面这句注释掉的代码是错误的。
# 虽然新手机能发短信,但是 某人的手机 是老手机类型,不包含发短信方法。

[!note]

新手机.new() 的意思是实例化一个新手机,就是创造一个新手机实例的意思。

例如我现在拥有三台手机:

var 手机们 := [
    手机.new(),
    新手机.new(),
    手机.new(),
]

这三台手机都存放在了数组中,现在我想给它们都开机:

for 手机之一 in 手机们:
    手机之一.开机()

在这段开机的遍历代码中,我们并不在乎手机是新手机还是老手机,我们只管调用它的开机方法即可,此时的 手机之一 变量就是具有多种形态的。

当然,使用多态的目的不是让我们的变量变得花里胡哨,而是规范一类操作,在刚才的例子中,我们就规范了所有手机的开机方式都应该使用 开机 方法,最终的作用就是实现了这一句话:不在乎手机是新手机还是老手机,我们只管调用它的开机方法

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

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

发布评论

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