大佬教程收集整理的这篇文章主要介绍了swift – 子类是否可以覆盖函数并进行更严格的返回?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
class Pet {} class Dog: Pet {} class House { func getPets() -> [Pet] { return [Pet]() } } class DogHouse: House { override func getPets() -> [Dog] { return [Dog]() } }
DogHouse类以严格满足House getPets的API要求的方式覆盖House getPets方法.
class Pet {} class Dog: Pet {} class House { func getPets() -> Pet { return Pet() } } class DogHouse: House { override func getPets() -> Dog { return Dog() } }
然而,这里的问题是Array< Dog>与Array< Pet>不是“更受限制”的类型,相反,Array< Pet>不是Array< Dog>的推广.形式上,Array< Dog>不是Array< Pet>的协变量.
class House<T> { var occupants = [T]() func addOccupant(_ o: T) { occupants.append(o) } } class Pet {} class Dog: Pet {} class Cat: Pet {} class PetHouseBuilder { func buildHouse() -> House<Pet> { return House() } } class DogHouseBuilder: PetHouseBuilder { // Suppose this were legal override func buildHouse() -> House<Dog> { return House() } } // The concrete return type of the object is `House<Dog>`,but // `PetHouseBuilder.buildHouse` has a static return type of `House<Pet>`,// so `petHouse` will have an inferred static type of `House<Pet>` let petHouse = PetHouseBuilder().buildHouse() let vulnerableLittle
以上是大佬教程为你收集整理的swift – 子类是否可以覆盖函数并进行更严格的返回?全部内容,希望文章能够帮你解决swift – 子类是否可以覆盖函数并进行更严格的返回?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。