Kotlin笔记继承、抽象类、接口(六)

Kotlin笔记继承、抽象类、接口(六)

Kotlin笔记数据类型(一)
Kotlin笔记字符串(二)
Kotlin笔记运算符(三)
Kotlin笔记函数(四)
Kotlin笔记面向对象(五)



一、继承

1.构造函数的继承

子类的主构造函数继承父类的主构造函数,那么子类的次构造函数不能直接调用父类的构造函数
子类主构造函数调用父类主构造函数:

/**
 * 定义父类
 */
open class Peson(val name: String,
                 val age: Int,
                 val birthDate: Date){
    
      // 声明父类的主构造函数


    //次构造函数
    constructor(name: String, age: Int) : this(name, age, Date())

    override fun toString(): String {
    
    
        return ("Person [name=$name, age=$age, birthDate=$birthDate]")
    }

}


class Student(name: String, age: Int, birthDate: Date,private var sex:Boolean) : Peson(name, age, birthDate) {
    
    

    constructor(name: String, age: Int, birthDate: Date):this(name,age,birthDate,false)
}

子类次构造函数调用父类构造函数


class Sudent1:Peson{
    
    
    var sex:Boolean=false
    constructor(name: String, age: Int, birthDate: Date,sex:Boolean):super(name,age,birthDate){
    
    
        this.sex=sex
    }
}

2.重写父类属性

fun main(args: Array<String>) {
    
    

    var  subClass=SubClass()
    println(subClass.x)
}

open class ParentClass {
    
    
    // x成员属性
    open var x = 10
}

class SubClass : ParentClass(){
    
    

    override var x=20
}

3.重写成员函数

fun main(args: Array<String>) {
    
    

    var  subClass=SubClass()
    subClass.setValue(30)
    println(subClass.x)
}

open class ParentClass {
    
    
    // x成员属性
    open var x = 10

    open fun setValue(x:Int){
    
    
        this.x=x*2
    }
}

class SubClass : ParentClass(){
    
    

    override var x=20

    override fun setValue(x: Int) {
    
    
        super.setValue(x)
        this.x=x*3
    }
}

二、抽象类

抽象类包含抽象属性和抽象方法,以及具体属性和具体方法

abstract class Figure{
    
    

    abstract val name:String // 抽象属性
    abstract fun onDraw()  // 抽象方法

    var cName:String="图形"  //具体属性

    //具体方法
    fun cOnDraw(){
    
    
        println("绘制图形")
    }
}

三、接口

接口的声明和抽象类差不多


interface FigureInterFace{
    
    
   val name:String // 抽象属性
   fun onDraw()  // 抽象方法
    //定义常量
    val cName:String
    get() = "初始化"

    //具体方法
    fun cOnDraw(){
    
    
        println("绘制图形")
    }
  
}

猜你喜欢

转载自blog.csdn.net/baidu_31956557/article/details/109248005