一,类和对象的定义
Class Person {
var name = " "
var age = 0
fun eat () {
println (name + "is eating. He is " + age + "years old")
}
}
//实例化对象
val p = Person()
二,继承与构造函数
继承:open关键子,可以让一个类可以被继承
如果不加open 关键字,则该类就不能继承,类似与Java中在类前加一个final关键字
父类: 正常情况下需要带一个括号,带上父类构造函数的参数,子类:括号类内部需要除了自己的参数外,还需要带父类的参数,自动调用了父类的主构造函数
主构造函数: 括号内 带入参数,如果需要执行逻辑,就需要加入init函数
open class Person(val name: String, val age: Int) {
fun eat() {
println(name + "is eating . He is " + age + "years old." )
}
}
// 继承
class Student(val sno: String, val grade: Int, name: String, age: Int) : Person(name, age) {
init {
println("sno : " + sno + "grade: " + grade)
} // 主构造函数,变量声明括号内,逻辑书写放在init方法内部
}
次构造函数:一个类只能有一个主构造函数,可以有多个次构造函数 constructor,需要直接或者间接调用主构造函数
class Student(val sno: String, val grade: Int, name: String, age: Int) : Person(name, age) {
init {
println("sno : " + sno + "grade: " + grade)
} // 主构造函数,变量声明括号内,逻辑书写放在init方法内部
constructor(name: String, age: Int) : this("",0,name,age) {
}
constructor() : this("", 0) {
} // 当既有主构造函数,又有次构造函数时,所有的次构造函数都必须调用主构造函数。,第一个次构造函数直接调用,第二个次构造函数间接调用主构造函数
}
特殊情况:当一个类没有显示的定义主构造函数且定义了次构造函数时,他就是没有主构造函数
这时候只能调用父类的主构造函数,所以 用了super关键字
class Students : Person {
constructor(name: String, age: Int) : super(name, age)
} // 没有主构造