kotlin的final、open和const修饰符

1.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)注意点

​ final和open不可用于修饰局部变量。

2.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"
posted @ 2019-05-28 15:58  谢光伟  阅读(3909)  评论(0编辑  收藏  举报