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("绘制图形")
}
}