iOS之封装、继承和多态

作者: 萤火驻守心间 | 来源:发表于2022-03-15 09:06 被阅读0次

    面向对象三大特性:封装、继承、多态

    封装:对外公开接口,内部隐藏实现细节。可防止外界任意修改数据

    继承:如果类与类之间存在逻辑关系,且有共用部分。即可抽取重复代码形成父类,子类拥有父类的成员变量和方法。如果类与类之间没有逻辑关系,可以将共同部分封装为单独的类,让其他类引用。
    缺点:耦合性太强,子类与父类相互依赖
    注意:
    1.不允许子类和父类拥有相同的成员变量
    2.每个类都有一个superClass指针指向其父类,每个对象都有一个isa指针指向类
    3.调用方法会优先在当前类找,找不到就会继续到父类中找

    多态:父类指针指向子类对象
    优点:在需要使用父类类型时,可以传入父类、子类对象(例如方法传参为父类类型,既可传父类对象,也可传子类对象)

    class Animal: NSObject {
        func animalRun() {
            print("animal run")
        }
    }
    class Dog: Animal {
        func dogrun(){
            print("dog run")
        }
    }
    func featuresTest(a: Animal) {
            guard let tem = object_getClass(a) else {
                return
            }
            print("isa:\(NSStringFromClass(tem)),superClass:\(class_getSuperclass(tem))")
        }
    

    例如:

    let dog = Dog()
    let animal: Animal = Dog()
    featuresTest(a: dog)
    featuresTest(a: animal)
    

    缺点:父类类型不能直接调用子类方法,必须强转为子类类型后才能调用。
    注意:
    1、程序运行时才会确定对象的真实类型
    2、如果存在多态,父类可以转为子类类型,不存在则转不了

    let dog = Dog()
    let animal: Animal = Dog()
    animal.animalRun()
    (animal as! Dog).dogrun()
    

    打印:
    animal run
    dog run

    相关文章

      网友评论

        本文标题:iOS之封装、继承和多态

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