zoukankan      html  css  js  c++  java
  • kotlin类与对象——>可见性修饰符

    1.在 Kotlin 中有这四个可⻅性修饰符:private 、protected 、internal 和public 。如果没有显式指定修饰符的话,默认可⻅性是 public 。

    2.包,函数、属性和类、对象和接口可以在顶层声明,即直接在包内

    // 文件名:example.kt
    package foo
    
    fun baz() { ...... }
    class Bar { ...... }
    
    //— 如果你不指定任何可⻅性修饰符,默认为 public,这意味着你的声明将随处可⻅; 
    //— 如果你声明为 private,它只会在声明它的文件内可⻅;
    //— 如果你声明为 internal,它会在相同模块内随处可⻅;
    //— protected 不适用于顶层声明。
    
    
    //注意:要使用另一包中可⻅的顶层声明,仍需将其导入进来。 例如:
    // 文件名:example.kt package foo
    private fun foo() {
        ......
    } // 在 example.kt 内可⻅
    
    public var bar: Int = 5 // 该属性随处可⻅
    private set // setter 只在 example.kt 内可⻅ 
    internal val baz = 6 // 相同模块内可⻅

    3.类和接口,对于类内部声明的成员:

    //— private意味着只在这个类内部(包含其所有成员)可⻅;
    //— protected ⸺ 和 private 一样 + 在子类中可⻅。
    //— internal ⸺ 能⻅到类声明的 本模块内 的任何客戶端都可⻅其 internal 成员;
    //— public ⸺ 能⻅到类声明的任何客戶端都可⻅其 public 成员。
    //请注意在 Kotlin 中,外部类不能访问内部类的 private 成员。
    //如果你覆盖一个 protected 成员并且没有显式指定其可⻅性,该成员还会是 protected 可⻅性。 例子:
    
    open class Outer {
        private val a = 1
        protected open val b = 2
        internal val c = 3
        val d = 4 //默认public
    
        protected class Nested {
            public val e: Int = 5
        }
    }
    
    class Subclass : Outer() { // a 不可⻅
        // b、c、d 可⻅
    // Nested 和 e 可⻅
        override val b = 5 // “b”为 protected
    }
    
    class Unrelated(o: Outer) {
    // o.a、o.b 不可⻅
    // o.c 和 o.d 可⻅(相同模块)
    // Outer.Nested 不可⻅,Nested::e 也不可⻅
    }

    4.构造函数,要指定一个类的的主构造函数的可⻅性,使用以下语法(注意你需要添加一个显式constructor关键字)

    class C private constructor(a: Int) { ...... }
    //这里的构造函数是私有的。默认情况下,所有构造函数都是 public,这实际上等于类可⻅的地方它就可⻅(即 一个 internal 类的构造函数只能在相同模块内可⻅)

    5.局部声明,局部变量、函数和类不能有可⻅性修饰符。

    6.模块,可⻅性修饰符 internal 意味着该成员只在相同模块内可⻅。更具体地说,一个模块是编译在一起的 一套 Kotlin 文件

    //— 一个IntelliJIDEA模块; 
    //— 一个Maven项目;
    //       一个 Gradle 源集(例外是 test 源集可以访问 main 的 internal 声明);
    //— 一次 <kotlinc> Ant 任务执行所编译的一套文件。
  • 相关阅读:
    【Spring Security学习之一】Spring Security入门
    【OAuth 2.0学习之一】OAuth 2.0入门
    【JWT学习之二】JWT实现单点登录
    【JWT学习之一】JWT入门
    【CAS学习之三】CAS客户端验证
    【CAS学习之二】部署CAS服务端
    【CAS学习之一】CAS入门
    ES 聚合分类(text字段)语句报错
    LeNet网络在fashion MNIST数据集上的实现
    动手深度学习 pytorch
  • 原文地址:https://www.cnblogs.com/developer-wang/p/13176824.html
Copyright © 2011-2022 走看看