Kotlin 入门总结2

130 阅读1分钟
// kotlin 构造方法,无需在类中申明,可以直接放在类的声明上
//接口的使用:来实现
class SimpleClass(var x: Int, val y: String) : SimpleInf {
    override fun method() {
    }

}

//接口的定义
interface SimpleInf {
    fun method()
}

//类的继承用:加类名,按构造传参
class SimpleClass2 : AbsClass() {
    override fun absMethod() {
    }

    override fun openMethod() {
        super.openMethod()
    }
}

//抽象类,方法默认不可覆写,想被覆写需要加open关键字
//抽象方法同Java相同,不能有方法体
abstract class AbsClass {
    open fun openMethod() {}
    fun normalMethod() {}
    abstract fun absMethod()
}

//java 的属性是field需要get、set获取
//kotlin的属性是Property,默认有get/set 需要自定义get、set可实现修改
class Person(age: Int, name: String) {
    var age: Int = age  //Property
    get() {
        return field
    }
    set(value) {
        field=value
    }
    var name: String = name
}

//属性的引用,有指定Receiver直接设定name,无Receiver指定Receiver如age
val person=Person(18,"zhangsan")
val nameRef=person::name
val ageRef=Person::age
ageRef.set(person,20)
nameRef.set("lisi")
//拓展方法,判断字符串是否是email,用String拓展好后直接使用
fun String.isEmail():Boolean{
    return false
}
"abc".isEmail()


//空类型安全问题,想赋值为空,类型申明中添加?
//nullable已经赋值为空 安全访问用?.
var nullable:String?="hello"
nullable=null
nullable?.length
//安全访问运算符?: 相当于elvis 如果前面表达式为空赋值为0
val length=nullable?.length?:0


//里氏替换原则 String 是String?的一个子类
var x:String="hell0"
var y:String?="ward"
y=x

//智能类型转换及其作用范围  强转as 安全转换as.
var value:String?=null
value="haha"
if (value!=null){ //做了智能类型转换  String?->String
    print(value.length)
}
//后续的操作 value的类型还是String?