Kotlin学习之类与对象篇—可见性修饰符

类,object,接口,构造函数,方法,属性以及他们的setters都拥有可见性修饰符(属性的getters拥有和属性相同的可见性)。Kotlin中有四种可见性修饰符:private, protected, internalpulibc

方法、属性、类、object 和 接口能在顶层中声明,即直接声明在包中。

package foo

fun baz() {}
class Bar {}
  • 如果不指定可见性修饰符,那么可见性将默认为public,意味着你的声明在任何地方可见;
  • 如果你声明为private,那么它只在包含此声明的文件中可见;
  • 如果你声明为internal,那么它在整个模块(module)中可见;
  • protected修饰符无法用于顶层声明。

类和接口

对于类中的成员来说:

  • private 意味着仅在该类中可见
  • protected 在该类中可见 + 在该类的子类中也可见
  • internal 在本模块(module)内可以声明该类的地方都可见
  • public 可以声明该类的地方都可见

注意,对于Java用户: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 也不可见 
}
(1). 构造函数

要指明一个类主构造函数的可见性,可以使用以下语法:

class C private constructor(a: Int) { ... }

上面这个构造函数声明为private。默认地(如果没有明确指定可见性),所有构造函数都为public,相当于凡是在类可见的地方构造函数均可见。(例如:internal类的构造函数只在相同的模块中可见)

(2). 局部声明

局部的变量、方法和类没有可见性修饰符。

模块

internal可见性修饰符意味着成员在同一个模块中可见。一个模块(module)是一起编译的一套kotlin文件。

猜你喜欢

转载自blog.csdn.net/chenrenxiang/article/details/80971481