空类型,智能类型转换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gacmy/article/details/83344946
//面向对象
class 妹子 (性格:String, 长相:String, 声音:String):人(性格,长相,声音){
    init {//构造方法 方法体
        println("new 了一个妹子,他性格${性格},长相${长相}")
    }


}
class 帅哥 (var 性格:String,var 长相:String,var 声音:String){
    init {//构造方法 方法体
        println("new 了一个妹子,他性格${性格},长相${长相}")
    }


}

open class 人 (var 性格:String,var 长相:String,var 声音:String){
    init {//构造方法 方法体
        println("${this.javaClass.simpleName}new 了一个妹子,他性格${性格},长相${长相}")
    }


}
//所有类都是 Any的子类
val my妹子 =妹子("温柔","甜美","动人")


fun main(args:Array<String>){
    val 我的妹子 = 妹子("","","")
    val 一个帅哥 = 帅哥("","","")
    println(我的妹子 is 人)
}

public class Child extends Parent {
    public String getname(){
        return "child";
    }
}

public class Parent {

}

//空类型安全 智能类型转换
fun getName():String{//String 非空类型
   // return null;//编译器报错
    return ""
}
fun getName1():String?{//String可以为空类型
    return null
}
fun main(args:Array<String>){
    println(getName().length)//无需要判空
//    if(getName() == null){//condition is always false
//
//    }
    val name1 = getName1()
    if(name1 != null){
        println(name1.length)
    }
    println(name1?.length)//如果name不为空返回长度 为空返回null
    if(getName1() == null) return
    val name2 = getName1() ?: return// ?:(如果是空执行符号后面的语句) 定义一个变量值是null返回 如果不是 直接赋值
    println(name1!!.length)//!! 欺骗编译器 确定为非空类型
}


fun main(args:Array<String>){
    val parent:Parent = Child()
    if(parent is Child){
        println(parent.getname())//不需要强转 因为已经做了类型判断了
    }
    val string:String?="hello"
    if(string is String)
       println(string.length)//做了类型判断
    if(string != null)//做了非空判断
        println(string.length)

    val parent1:Parent = Parent()
    val child:Child? = parent as Child //parent强转child 转换失败 抛出异常
    val child1:Child? = parent as? Child //转换失败 直接返回空 as?
}

猜你喜欢

转载自blog.csdn.net/gacmy/article/details/83344946