文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
重写
又一个新要求来了,之前那个能发短信的手机,为了显得与众不同,他们决定定制一个开机画面。
现在,全游戏的手机在开机时都会显示两句话:
加载中...
开机完成
因为所有手机的开机方法都是相同的:
func 开机():
print("加载中...")
已经开机 = true
print("开机完成")
为了展示那个定制化开机画面,我们可以写一个新的 开机2.0
方法。不过,当一个外人拿到手机时,他可能会错误的使用老开机方法,导致没能看到炫酷的新开机画面,因此我们要做的不是加方法,而是改方法。
重写是面向对象中一个重要的功能,它可以让我们在子类中覆盖父类的方法,从而实现方法名一样但效果不同的效果。
现在,来到我们的新手机类中,添加如下代码:
func 开机():
print("嘟-嘟-嘟-.-.-.-")
已经开机 = true
print("Hello!")
我们又一次声明了开机方法,这与父类中的开机方法重名,这,就构成了重写,也就是子类的这个开机方法覆盖了父类的开机方法。
现在,当一个人拿到手机时,不论手机是什么型号,只要他开机,即可根据手机型号显示不同的开机画面。
子类调用父类
现在,这个新手机想要大力推广短信功能,它们决定在每次打电话前都显示一句“为什么不试试发短信呢?”这样的广告语。
为了达成这个目标,我们不希望完全覆盖父类的方法,而是希望在父类方法前或后添加自己的代码,这时候,我们可以在代码中使用 super
关键字引用父类实例并从中调用方法:
# 在子类中
func 打电话(电话号码:String):
print("为什么不试试发短信呢?")
# 调用父类的打电话方法
super.打电话(电话号码)
现在,新手机在打电话时,会先显示那句广告,然后执行父类的打电话方法。
[!tip] 生命周期方法
其实那些 _ready、_process 等生命周期方法也是重写的父类方法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论