美文网首页
Swift5.1学习随笔之多态

Swift5.1学习随笔之多态

作者: SAW_ | 来源:发表于2020-04-27 11:11 被阅读0次

多态的实现原理:

  • OC:Runtime
  • C++:虚表(虚函数表)
  • Swift:纯Swift没有Runtime,更加接近虚表的实现
class Animal {
    func speak() {
        print("Animal speak")
    }
    func eat() {
        print("Animal eat")
    }
    func sleep() {
        print("Animal sleep")
    }
}

class Dog: Animal {
    override func speak() {
        print("Dog speak")
    }
    override func eat() {
        print("Dog eat")
    }
    func run() {
        print("Dog run")
    }
}

var a = Animal()
a.speak() // Animal speak
a.eat() // Animal eat
a.sleep() // Animal sleep
print("******************")
var d = Dog()
d.speak() // Dog speak
d.eat() // Dog eat
d.sleep() // Animal sleep
d.run() // Dog run

上面的代码写法都看得懂,看下下面的写法:

var a = Animal()
a.speak() // Animal speak
a.eat() // Animal eat
a.sleep() // Animal sleep
print("******************")
//多态:父类指针指向子类对象
a = Dog()
a.speak() // Dog speak
a.eat() // Dog eat
a.sleep() // Animal sleep

相关文章

  • Swift5.1学习随笔之多态

    多态的实现原理: OC:Runtime C++:虚表(虚函数表) Swift:纯Swift没有Runtime,更加...

  • Swift5.1学习随笔之指针

    Swift中也有专门的指针类型,这些都被定义为Unsafe(不安全的),常见的有以下4种类型 UnsafePoin...

  • Swift5.1学习随笔之fatalError

    如果遇到严重问题,希望结束程序运行,可以直接使用fatalError函数抛出错误(这是无法通过do-catch捕捉...

  • Swift5.1学习随笔之mutating

    结构体和枚举是值类型,默认情况下,值类型的属性不能被自身的实例方法修改在func关键字前面加mutating可以允...

  • Swift5.1学习随笔之常量

    Swift中的常量用let修饰 1、只能赋值一次 2、它的值不要求在编译时期确定,但是使用之前必须赋值一次 3、常...

  • Swift5.1学习随笔之@discardableResult

    在func前面加@discardableResult,可以消除:函数调用后返回值未被使用的警告⚠️ 或者可以用下划...

  • Swift5.1学习随笔之属性

    swift中跟实例相关的属性可以分为2大类 1、存储属性(Stored Property)2、计算属性(Compu...

  • Swift5.1学习随笔之协议Protocol

    协议Protocol 协议可以用来定义方法、属性、下标声明,协议可以被枚举、结构体、类遵守(多个协议用逗号隔开) ...

  • Swift5.1学习随笔之扩展(Extension)

    Swift中的扩展,类似于OC中的分类Category 扩展可以为枚举、类、结构体、协议添加新功能可以添加方法、计...

  • Swift5.1学习随笔之函数func

    Swift中的函数用func关键字定义 举个? 无返回值的函数 有3中表达写法 隐式返回 如果整个函数体是一个单一...

网友评论

      本文标题:Swift5.1学习随笔之多态

      本文链接:https://www.haomeiwen.com/subject/eyoewhtx.html