09-方法、下标、继承

2021-08-04  本文已影响0人  SwordDevil

一、方法(Method)

mutating

@discardableResult

二、下标(subscript)

sub  script
<sup> : 上标 -> 在左上角显示的数字
<sub> : 下标 -> 在右下角显示的数字

下标的细节

结构体、类作为返回值对比

接收多个参数的下标

三、继承(Inheritance)

内存结构

Animal是堆空间的对象 需要占用16个字节,最前面的8个字节用来放类型信息,再往后的8个字节放引用计数相关的东西,在往后才是放age的,而且还有个内存对齐,所以class Animal占32个字节
Dog继承子Animal,相当于把age直接拿到Dog内部,所以还是32个字节
同理,ErHa是把上面的拿到内部,所以是48个字节

重写实例方法、下标

重写类型方法、下标

但是子类的class可以替换成static

重写属性

重写实例属性

重写类型属性

属性观察器

final

多态

/*
 多态的实现原理:
 1.OC:Runtime
 2.C++:虚表(虚函数表)
 
 Swift中多态的实现原理(比较偏向于C++)
 */

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 anim: Animal
anim = Animal()
anim.speak()
anim.eat()
anim.sleep()

anim = Dog()
anim.speak()
anim.eat()
anim.sleep()
//anim.run()

上一篇 下一篇

猜你喜欢

热点阅读