iOS面试-open和public的区别

2020-06-15  本文已影响0人  SK丿希望

Swift3 open和public的区别

新增open访问控制关键字后,对public的两种功能(外部调用和被继承/override)做了区分。和public一样,open被用来修饰class和class成员。新的public限定范围也做了调整。

修饰class的public和open区别

public修饰的class只允许外部模块调用,但是不允许继承。 而open修饰的class既允许其他模块调用,也允许被子类继承

修饰class成员的public和open的区别

public修饰的成员只允许其他模块调用,但不能被覆盖(override)。而open修饰的成员既允许被其他模块调用,也允许成员被覆盖

open的使用注意

如果class声明为public,那么class的成员变量不能为open,因为public class已被限定为不可继承

public class NonSubclassableParentClass {
        public func foo() {}
        //非法声明
        open func bar() {}
        public final func baz() {}
    }

其他模块继承覆盖父类的成员时,也需要把成员声明为open

open class SubclassableParentClass {
        public func foo() {}
        open func bar() {}
        public final func baz() {}
    }

    open class SubclassC : SubclassableParentClass {
        //非法,成员没有被声明为open
        override func bar() { } 
    }
上一篇下一篇

猜你喜欢

热点阅读