嵌套類(Nested Class)
Kotlin 的嵌套類是指定義在某一個類內部的類,嵌套類不能夠訪問外部類的成員。除非嵌套類變成內部類。
class Outter1 {
val str:String = "this property is from outter1 class"
class Nested {
fun foo() = println("")
}
}
fun main(args: Array<String>) {
Outter1.Nested().foo()
}
如果嵌套類想訪問外部類的屬性,會報錯。
內部類(Inner Class)
Kotlin 的內部類使用inner
關鍵字標識,內部類能夠訪問外部類的成員。
class Outter2 {
val str:String = "this property is from outter2 class"
inner class Inner {
fun foo() = println("$str")
}
}
fun main(args: Array<String>) {
Outter2().Inner().foo()
}
小結一下嵌套類和內部類:
- 默認的是嵌套類
- 嵌套類不持有外部類的引用,內部類持有外部類的引用
- 嵌套類的創建方式:
外部類.嵌套類()
- 內部類的創建方式:
外部類().內部類()
枚舉類
Java 中的枚舉類使用enum
關鍵字修飾,而 Kotlin 中的枚舉類需要使用enum
和class
兩個關鍵字。
例如 Java 的枚舉類使用:
public enum Color {
RED("紅色", 1), GREEN("綠色", 2), BLUE("藍色", 3);
String colorName;
int value;
Color(String colorName, int value){
this.colorName = colorName;
this.value = value;
}
}
它等價於下面的 Kotlin 枚舉類:
enum class Color constructor(var colorName: String, var value: Int) {
RED("紅色", 1), GREEN("綠色", 2), BLUE("藍色", 3)
}
Kotlin 的枚舉類更加簡潔,枚舉類的屬性不需要寫在枚舉類內部。每一個枚舉都是枚舉類的實例。