1、与Java对比
Java中的可见性修饰符和Koltin中的可见性修饰符不同之处:
1、 四种修饰符的不同。Koltin的四种修饰符(public、interna、protected、private),Java的的四种修饰符(public、protected、privavte、default(即不使用任何修饰符))。
2、默认修饰符的不同。Kotlin的默认修饰符为public,Java的默认修饰符为default。
2、kotlin的四种访问修饰符<变量、函数、属性>
1、概述
public修饰符表示 公有 。此修饰符的范围最大。当不声明任何修饰符时,系统会默认使用此修饰符。
internal修饰符表示 模块 。对于模块的范围在下面会说明。
protected修饰符表示 私有+子类。值得注意的是,此修饰符不能用于顶层<包中>声明,在下面可以看到。
private修饰符表示 私有 。此修饰符的范围最小,即可见性范围最低。
2、顶层
顶层: 直接在包下声明
在顶层情况下声明的变量、方法、类、接口等,不能使用protected修饰符。
public修饰符可省略,因为它是系统默认的。
在同一文件下,用任意修饰符都可以访问,当然此处除开protected修饰符
在不同文件下,只能访问public、internal修饰符修饰的变量、方法等
在类中声明属性、方法等,可以使用任意修饰符修饰。并且在类中的任意位置都能访问各个修饰符修饰的属性、方法等。
在类外,只能访问由public、internal修饰符修饰的属性、方法。此情况不管是不是在同一个文件中去操作。
在接口中声明的情况下,只能由public修饰符修饰属性。方法可由public、private两个修饰符去修饰,但是,用private修饰符修饰符修饰的方法不能被实现该接口的类重写。
为了使用接口中由public修饰符修饰的属性、方法等。只能定义一个类去实现该接口,然后重写其属性、方法。这样就能在可在类中或类外去操作。
4、小结
在顶层情况下声明的变量、方法、类、接口等,不能使用protected修饰符。
public修饰符可省略,因为它是系统默认的。
在同一文件下,用任意修饰符都可以访问,当然此处除开protected修饰符
在不同文件下,只能访问public、internal修饰符修饰的变量、方法等;
3、final、open修饰符
1、概念
final 用于修饰类、属性和方法,代表类、属性和方法是不可被继承的,kotlin 类、属性、方法如果不添加修饰符(final/open 修饰符)默认使用 final 修饰。
open 是 final 的反义词,用于对类、属性和方法开放继承权限。
/**
* 默认final修饰的类
*/
class FinalClass
//class sub1 : FinalClass()//子类不能继承final类
/**
* open修饰的类
*/
open class OpenClass
class sub2 : OpenClass()//子类可以继承open类
2、注意点
4、const修饰符
1、概念
const 用来修饰可执行“宏替换”的常量。
宏替换:“宏变量”被称为“编译时”常量,宏替换指在编译阶段就会被替换掉。
const 只能修饰不可变变量(val)
2、“宏替换”常量条件
- 使用const修饰;
- 位于顶层或者是对象表达式的成员;
- 初始值为基本数据类型(java8大类型);
- 没有自定义的getter方法;
- const val定义的变量,如果进行拼接或者运算,被拼接的其他变量也要是宏变量,否则编译不通过。
3、使用
fun main(args: Array<String>) { //const1和const2是宏变量,因此在编译时就会被替换成对应的常量 println(const1 === "const1")//true,相当于println("const1" === "const1") println(const2 === "const2")//true,相当于println("const2" === "const2") } //定义宏变量const1 const val const1 = "const1" //定义宏变量const2(发生字符串拼接,即使拼接时有隐式转换,该变量还是宏变量) const val const2 = "const" + 2 //定义普通变量 val common = "common" //下面两种定义宏变量方式编译报错 //const val errorConst1 = "errorConst1$common" //const val errorConst2 = "errorConst2${getStr()}" /** * 定义一个方法返回str */ fun getStr(): String = "str"