04-访问权限
4.2.3 访问权限
和Java一样,Kotlin也对变量和属性的访问权限进行了区分。除了默认访问权限public之外,Kotlin的权限修饰符还包括protected、private和internal。区别于Java的访问权限,Kotlin提供了一个新的internal权限,使用internal定义的对象,同一模块是可以相互访问的。
在Kotlin中,每个声明的变量和属性都有get和set方法,可以根据需要来决定是否需要实现get和set方法,如果声明的变量和属性不想被外部访问,可以使用private修饰符。代码如下。
var name: String = ""
private set
但是这种方式只适用于set方法,get方法的访问权限默认和属性是一致的,如果人为地修改get方法的访问权限就会报错。代码如下。
var name: String = ""
private get // 编译报错,get方法的访问权限和属性默认权限不一致
如果重载一个成员函数但是并没有显示指定修饰符,则重载函数默认会拥有protected权限。代码如下。
open class Outer {
private val a = 1
protected open val b = 2
internal val c = 3
val d = 4
protected class Nested {
public val e: Int = 5
}
}
class Subclass : Outer() {
override val b = 5 // b为protected类型
}
class Unrelated(o: Outer) {
…
}
一般来说,所有的构造函数默认都是public的,但是为了限制访问权限,也可以给构造函数指定修饰符,例如,将构造函数指定为私有的。
class C private constructor(a: Int) { … }