[Swift]多态类型转换以及不确定类型

1. Swift的多态:

    1) 和其它语言多态描述一致,都是用父类指针或引用(这里的父类是指祖先类)指向子类的实例,然后在子类中覆盖父类的方法,利用该父类引用调用相同的方法而产生不同的行为;

    2) Swift的多态类型转换:和普通的类型转换不一样,普通的类型转换是指一般意义上的强制类型转换,但是强制类型转换不能发生在类型之间,如果使用"类名(转换对象)"则会触发相应类的构造器而不能达到转换类型的效果,因此Swift的类型转换只能发生在可以转换的两个对象之间,对于不能转换的两个对象会在编译阶段或是运行阶段报错;

Swift专门为多态之间的类型转换提供了解决方案,它的机制有严格的规则要求,首先必须要让一个父类的引用指向一个其子类的实例(这个是大前提),然后可以利用is运算符来判断该引用指向的实例是否属于某个子类,同时可以使用as运算符将该引用指向的实例正确地转化成相应的子类类型,这种转换也称为向下转换(即先将子类实例用父类包装,等到使用时再把它彻底扩展成子类);

这就好比有一个动物的序列,序列中有各种各样的动物,起初不知道该序列里每个动物都属于哪一类(比如猫科、鸟类等),但大前提是这些子类(猫科、鸟类、爬行类等都属于动物这个父类的子类),因此起初可以将这整个序列里的元素都当成动物这个基类来看待(is-a的关系,C++中解释继承关系的经典形容),然后逐个取出序列里的元素判断其具体属于哪个子类(是猫科呢还是鸟类等),这是就使用is来判断,如果确实属于猫科,则使用as操作符将一般性的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值