类和对象
类的创建和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()
}
}
}
网友评论