类的定义
创建一个类
class ClassKt {
private var x:Int = 0
}
- 默认public
- var x 必须初始化
构造方法
副(次)构造器 secondary constructor
class ClassKt {
private var x:Int = 0
constructor(x:Int){
this.x=x
}
}
constructor 构造器关键字,相当于java public ClassKt( ){}
主构造器
class ClassKt constructor(x: Int) {
private var x: Int = 0
}
再简化的写法
class ClassKt constructor(var x: Int) {
}
再简化
class ClassKt (var x: Int) {
}
实例化调用
fun main() {
val classKt = ClassKt(666)
println(classKt.x)
}
接口的定义
创建接口
interface InterfaceKt {
fun callBack()
}
- 默认 public
接口实现
class SimpleClass : InterfaceKt {
override fun callBack() {
}
}
- 通过冒号:加接口名称实现接口,这里冒号相当于 java implements
抽象类
创建抽象类
abstract class AbstractClass {
}
abstract class AbstractKt {
abstract fun getList()
open fun overridable() {}
fun nonOverridable(){}
}
- open 可以覆写该方法
继承抽象类
class Simple : AbstractKt() {
override fun getList() {
}
override fun overridable() {
}
}
- 与接口一样通过冒号连接,区别在于继承对象后面加括号
属性
声明一个属性的完整语法是
var <propertyName>[: <PropertyType>] [= <property_initializer>]
[<getter>]
[<setter>]
class PropertyKt(name: String, idCard: Int) {
var name: String = name //property
get() {
return field
}
set(value) {
field = value
}
val idCard: Int = idCard
get() {
return field
}
//没有set ,因为是只读 val
}
- 通过 field 引用幕后字段( backing field )
- 默认生成getter、setter
- 只读属性 val 不允许 setter :::danger Java 中有field,没有property。可以理解kotlin property 等于Java field + get + set :::
java 中的field
public class LogTag {
private String name;//field
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
属性引用
fun main() {
val propertyKt = PropertyKt("java", 123)
val nameRef = propertyKt::name
nameRef.set("kotlin")
println(nameRef.get())
}
- 与函数引用一样通过 :: 连接