Kotlin-类和对象

2021-03-18  本文已影响0人  在下陈小村
类和对象

类的创建和java还是比较类似的,属性和方法的定义,创建不用写new

class Person {
    var name=""
    var age=0

    fun eat(){
        println(name+" is eating,He is "+age+" years old")
    }
}
//对象的创建和使用
val person=Person()
    person.age=10
    person.name="Tom"
    person.eat()

在kotlin中如果要使用类的继承,那么就需要在类之前加上open关键字

open class Person {
    var name=""
    var age=0

    fun eat(){
        println(name+" is eating,He is "+age+" years old")
    }
}

class Student:Person(){
    var sno=""
    var grade=0
}

val student=Student()
    student.grade=2
    student.sno="123123"
    student.name="阿毛"
    student.age=20
    student.eat()

kotlin的构造函数,被继承的主构造函数,带参数时,继承父类的子类的主构造函数也必须带有该参数。次构造函数用constructor来修饰,必须继承主构造函数this。可以只使用次构造函数,直接用constructor,通过super继承父类。

//主构造函数
open class Person(val name:String,val age:Int) {

    fun eat(){
        println(name+" is eating,He is "+age+" years old")
    }
}
//主构造函数和次构造函数
class Student(var sno:String,var grade:Int,name:String,age:Int):Person(name,age){
    constructor(sno: String,grade: Int):this(sno,grade,"",0)
    constructor():this("",0)
}
//只有次构造函数
class Teacher:Person {
    constructor(grade:Int,name:String,age:Int):super(name, age)
}
延迟初始化

在使用的过程中会发现全局变量我一开始并不想直接初始化,当需要使用的时候才初始化,这个我要怎么办,可以通过lateinit var,来延迟初始化,另外可以通过::person.isInitialized来判断参数是否已经完成了初始化,这个是固定写法。

class MainActivity : AppCompatActivity() {
    lateinit var  person:Person
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        doSomething()
        if (!::person.isInitialized){
            person=Person()
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读