版权声明:本文为博主原创文章,未经博主允许不得转载。 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?
}