美文网首页
Swift 3 访问控制open与public的区别

Swift 3 访问控制open与public的区别

作者: 红色海_ | 来源:发表于2020-03-18 20:39 被阅读0次

    Swift 3新增了访问控制关键词open,它与原来的public有什么区别呢??

    Swift2.x public可以用来修饰class或者class成员(包括成员方法,成员属性和脚本)。

    修饰class的public:

    允许其他模块实例化class和使用class
    允许其他模块定义class的子类
    修饰class成员的public:

    允许其他模块使用使用
    允许其他模块覆盖override
    所以public限定符既表示运行其他模块在外面调用,也表示了class允许被继承和成员被覆盖override。

    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() { } 
        }
    

    相关文章

      网友评论

          本文标题:Swift 3 访问控制open与public的区别

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