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"