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 任务执行所编译的一套文件。
  • 相关阅读:
    hdu 1455 N个短木棒 拼成长度相等的几根长木棒 (DFS)
    hdu 1181 以b开头m结尾的咒语 (DFS)
    hdu 1258 从n个数中找和为t的组合 (DFS)
    hdu 4707 仓鼠 记录深度 (BFS)
    LightOJ 1140 How Many Zeroes? (数位DP)
    HDU 3709 Balanced Number (数位DP)
    HDU 3652 B-number (数位DP)
    HDU 5900 QSC and Master (区间DP)
    HDU 5901 Count primes (模板题)
    CodeForces 712C Memory and De-Evolution (贪心+暴力)
  • 原文地址:https://www.cnblogs.com/developer-wang/p/13176824.html
Copyright © 2011-2022 走看看