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"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM