//Kotlin中的类与对象
fun classAndObject(){
//类的定义,使用class关键字来修饰类
open class Person{
//如果希望子类继承该方法就必须添加open关键字
open fun eat(someThing:String){
println("这是父类的方法:$someThing")
}
}
//类的构造,分为主构造和次构造
class Student(var name:String,val age:Int){//有修饰constructor得写否则就不用
var tell:Long? = null
//次构造函数(相当于Java中的方法重载)
constructor(name:String,age:Int,t:Long ) : this(name, age) {
this.tell = t
}
//类初始化,和Java中的静态代码块一样
init {
println("==========init1==============")
}
init {
println("==========init2==============")
}
}
var student1 = Student("李四",24)
student1.name = "李逵"
println("访问学生变量:${student1.name}")
var student2 = Student("李四",24,13888888888)
student2.tell = 1202112121502
println("访问学生变量:${student2.tell}")
//类的继承
class StudentA(var name:String,var age:Int) : Person(){
override fun eat(someThing: String) {
super.eat(someThing)
println("这是子类的方法:$someThing")
}
}
var stuA = StudentA("张三",35)
stuA.eat("${stuA.name}吃牛肉")
//抽象类的定义,和Java定义是一样的
abstract class Bird(name:String) : Person(){
//定义抽象方法
abstract fun fly()
//继续传递给抽象子类
abstract override fun eat(someThing: String)
//定义普通函数
fun birdEat(some:String){
println("吃的啥:$some")
}
}
}
class Bus {
//定义变量,默认必须赋值且不能为空,如果要为空则使用“?”
private var carName = "三轮车"
//getter和setter
private var name:String?
get() = name
set(value){name = value}
//延迟初始化,调用时必须判断是否初始化过,判断isInitialized
private lateinit var paoLu:String
//伴生对象必须在class中,定义静态常量,方法,函数,半生对象只有一个
companion object Factory{
private const val TAG = "Bus"//与Java静态常量定义类似
fun pao(){
println("$TAG")
}
}
fun method(){
println(TAG)
pao()
//判断属性 是否初始化
if (this::paoLu.isInitialized){
println(paoLu)
}
}
}