您的位置:首页 > 其它

Kotlin学习(11):可见性修饰符

2018-01-14 18:32 239 查看
开发环境:IntelliJ IEDA

个人博客:http://blog.csdn.net/IInmy

项目源码:https://github.com/Rushro2m/KotlinForOfficial

官方文档中文版:https://www.kotlincn.net/docs/reference/visibility-modifiers.html

1、应用域

类、对象、接口、构造函数、方法、属性和它们的setter都可以有可见性修饰符。在Kotlin中有四个可见性修饰符:

private

protected

internal

public

如果没有显式指定修饰符的话,默认可见性都是public。

2、包名

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

package foo

fun baz(){}
class Bar{}


每一个修饰符都限制了一定的范围:

未指定修饰符时,默认为
public
,表明随处可见

声明为
public
时,它只会在声明它的文件内可见;

声明为
internal
,它会在相同模块内随处可见;

protected
不适用于顶层声明。

例如:

package foo

//在此类内随处可见
private fun foo(){}

//该属性随处可见
public var bar: Int = 5
//setter只在此文件内可见
private set

//相同模块内可见
internal val baz = 6


3、类和接口

对于类内部声明的成员:

private
意味着只在这个类内部(包含其所有成员)可见;

protected
private
一样+在子类中可见。

internal
能剪刀类声明的本模块内的任何客户端都可见其
internal
成员;

public
能见到类声明的任何客户端都是可见其
public
成员。

open class Outer {
private val a = 1
protected open val b = 2
internal val c = 3
val d = 4

protected open class Nested {
public val e: Int = 5
}
}

class Subclass : Outer() {
//b被open修饰,可以直接访问
override val b: Int
get() = 5

val xx = Outer()
//修饰符是protected或者private
private var yy = Outer.Nested()

fun foo() {
//c,d,e可见,但是需要通过对应对象
println(xx.c)
println(xx.d)
print(yy.e)
}
}

class Unrelated(o: Outer) {
val kk = o
fun stringPrint() {
//a,b不可见,c,,d可见
print(kk.c)
print(kk.d)
}
}


要指定一个类的主构造函数的可见性,使用以下语法,需要添加一个显式的
constructor
关键字:

class C private constructor(a: Int){
//代码块
}


4、模块

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

一个IntellJ IEDA模块;

一个Maven或者Gradle项目;

一次
<kotlinc>
Ant任务执行所编译的一套文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息