Kotlin中類的聲明使用class關鍵字, 在class後面跟類名即可例如:
class Empty
class Stu {
fun getName() : String {
return "default"
}
}
class stud {
fun getAge() : Int {
return 0
}
}
上面這段代碼共建立了三個類, 第一個是一個空類, 第二個和第三個是正常的類, 可以看到類名首字母大寫或小寫都可以, 但是還是大寫比較合适.
kotlin中類的構造函數和java中略有不同, kotlin中構造函數分為主構造函數和次構造函數, 主構造函數是解除安裝類名後面, 例如:
class Student2 constructor(name : String) {
init {
println("name is : $name")
}
}
Student2類的主構造函數隻有一個String類型的name參數, 2~4行為主構造函數的代碼塊
fun main(args: Array<String>) {
val stu = Student2("小明")
}
執行這段代碼就會列印"name is 小明"也就是會執行init的代碼塊中的代碼, 是以可以在init裡對屬性做初始化例如:
class Student2 constructor(name : String, age : Int) {
var nameStr : String = "default"
var ageInt = 0
init {
nameStr = name
ageInt = age
println("name is : $name")
}
}
甚至可以直接給類的成員變量指派例如:
class Student2 constructor(name : String, age : Int) {
var nameStr = name
var ageInt = age
init {
println("name is : $nameStr , age is $ageInt")
}
}
更簡單的寫法, 可以直接把類的成員變量聲明在構造函數中例如:
class Student2 constructor(val name : String, val age : Int) {
init {
println("name is : $name , age is $age") // name is : 小明 , age is 10
}
}
fun main(args: Array<String>) {
val stu = Student2("小明", 10)
println(stu.name + " " + stu.age) // 小明 10
}
一種簡單的寫法, 可以主構造器可以省略constructor關鍵字:
class Student2 (val name : String, val age : Int) {
init {
println("name is : $name , age is $age")
}
}
注意: 果構造器有注解,或者有可見度修飾符,這時constructor關鍵字是必須的,注解和修飾符要放在它之前, 例如如下這種寫法:
class Student2 private (val name : String, val age : Int) {
init {
println("name is : $name , age is $age")
}
constructor(name : String) : this(name, 20)
}
這種寫法會提示如下錯誤:
Error:(22, 16) Kotlin: Use 'constructor' keyword after modifiers of primary constructor
我們做這樣的修改就可以了:
class Student2 private (val name : String, val age : Int) {
init {
println("name is : $name , age is $age")
}
constructor(name : String) : this(name, 20)
}
fun main(args: Array<String>) {
val stu = Student2("小明")
println(stu.name + " " + stu.age)
}
例子中我們的主構造器定義成了private類型, 但在類内部定義了一個從構造器(第5行), 利用this關鍵字 調用了雙參數的主構造器, 并給類的成員變量name和age進行了指派