定义类和构造方法
class SimpleClass(var x: Int, val y: String){
}
//创建类不需要new关键字
val simpleClass = SimpleClass(9, "Hello")
构造方法放在类名的后面,如果x和y前面加了var
或val
, x和y会分别在类中定义一个属性以及对应的getter和setter方法,不需要额外写,否则必须手动写getter和setter实现。类前面不需要修饰符public private等,跟java不一样,默认是public的。
像下面这样:
class Person(age: Int, name: String) {
var age: Int = age //property
get() {
return field
}
set(value) {
println("setAge: $value")
field = value
}
var name: String = name
get() {
return field // backing field
}
set(value) {
field = value
}
}
kotlin中,get和set方法可以显示写出来,但是一般默认不需要显示写出来,所以可以直接这样简写:
class Person(age: Int, name: String) {
var age: Int = age
var name: String = name
}
这样也会默认生成get和set方法,除非你需要自定义get和set方法中的逻辑,那时就需要显示写出来了。
- 定义成员变量必须提供初始值:
var a : Int = 0
var b : String = ""
val c : Long = 0L
这与java也不同,java中定义变量不指定值有默认值,如int是0
- 如果定义了初始值,变量默认具备get和set方法,可以直接引用变量读取值和赋值
val simpleClass = SimpleClass(9, "Hello")
println(simpleClass.a)
simpleClass.a = 122
println(simpleClass.a)
- 定义变量时如果不提供默认值,则必须定义get和set方法, 快捷键可以提示
var sss: Int
get() {
return 100
}
set(value) {
}
//常量属性
val z : Long
get() {
return simpleProperty * 2L
}
接口定义
interface SimpleInf {
//与java不同,接口里面可以定义待实现的常量属性,由子类实现
val simpleProperty: Int // property
fun simpleMethod()
}
与java不同的是,接口里面由子类实现的常量属性,java的接口类中变量值只能是初始化固定的。
- 实现接口:
class SimpleClass(var x: Int, val y