Kotlin学历之可见性修饰符

简述

与java中的修饰符相比,Kotlin中多了一个叫internal,翻译过来是形容词内部,内置的意思。具体为什么会多一个,请看下期!开个玩笑啊- -,还有三个就跟java的用法基本类似了,但也会不同,下面一一讲解。

internal

最关心的放最前面哈,大家肯定在思考,为什么会多这么一个修饰符,意思在哪?仔细回顾了一下之前的东西,突然明白了,在Kotlin中是可以有包级属性的,而java包下面只能是类或者接口等,Kotlin就可以很随意,定义变量、定义类、定义接口、定义函数都可以,具体可以看下面的图,编译器是通过的,再想想protected修饰符,它是内部类或者子类可以访问的修饰符,在Kotlin中就因为有了包级的属性,所以才多了个internal修饰符,为了区别于protected,被internal修饰的类、函数或者接口可以在同一module下访问,还有个特点,如果internal修饰的是类内部的成员呢,那这个成员就成了只有这个类内部能访问的成员,比如private修饰的类,就只能在类的内部访问。

Kotlin学历之可见性修饰符
包级属性

private

同文件内可见。因为包级属性和包级函数会被编译为“文件类”内的静态成员,所以如果用 private 修饰,它们就只在这个文件类里可见,也就是文件内可见。也就是继承后也是看不见的,如图所示,是没有p属性的。这跟java一样,还有就是一等公民,类、对象、接口……(也就是包成员)如果被定义为private,那么它们只会对被定义所在的文件可见

Kotlin学历之可见性修饰符
继承的子类

protected

这个修饰符的存在就是只能修饰类或者接口中的成员上,包级属性是不能修饰的。如图

Kotlin学历之可见性修饰符
修饰包级属性

public

这个修饰符与java最大的不同应该是,它在Kotlin中是默认的,就是你不声明的属性,会默认成为public。

总结

可见性修饰符就先学到这,下期学习伴生对象、数据类以及密封类。