目录
Kotlin中的抽象类和接口的机制与Java相似。
抽象类、抽象成员
抽象类是不能实例化的,只能实现它的继承子类(只能是非抽象的)。
抽象类可以包含抽象的 属性 和 抽象的函数,需要使用 abstract 关键字修饰。
其子类中实现这些抽象的 属性 和 函数 成员的都必须使用 override 关键字修饰。
抽象类中可以带实现的函数,该函数可以在所有子类中都能被直接调用,
并且该函数是默认为 final,不可以被覆盖重写的,
如果要开放给子类重新实现这个函数,可以在该方法前面加上 open 关键字。
abstract class Shape {
// 抽象类所包含的抽象 属性 和 函数,使用 abstract 关键字修饰。
abstract var width: Double
abstract var height: Double
abstract var radius: Double
abstract fun area(): Double
open fun onClick(): Unit { // open 关键字,将该函数开放给子类重新实现这个函数
println("I'm clicked !")
}
}
class Rectangle(override var width: Double, override var height: Double) : Shape() {
// 子类中继承这些 属性 和 函数 的成员都必须使用 override 关键字修饰
override var radius: Double = width/2
override fun area(): Double {
return height * width
}
}
class Circle(override var radius: Double): Shape() { // 继承Shape抽象类
override var width: Double = radius *2
override var height: Double = radius *2
override fun area(): Double {
return 3.14 * radius *radius
}
override fun onClick() {
println("Circle is clicked~")
}
}
fun testShape(): Unit {
val rect = Rectangle(2.0,5.2)
println("rect area= ${rect.area()}, r = ${rect.radius}")
rect.onClick()
val c = Circle(5.8)
println("c area= ${c.area()}, r = ${c.radius}, w= ${c.width}")
c.onClick()
}
- 子类能够继承父类的 public和protected 成员变量,不能继承父类的 private 成员变量;
- 同名变量。如果子类中出现了同名的成员变量,那么子类的成员变量会屏蔽掉父类的同名成员变量,即发生隐藏现象。 在子类中访问父类的同名变量,需要使用
super关键字进行引用。
接口
- 接口本身不能实例化,只能实例化它的实现类。
- 一个类可以实现多个接口。
- 接口是没有构造函数的,使用“:”操作符来实现一个接口,多个接口之间使用“,”操作符连接。
- Kotlin的接口可以包含抽象方法和 方法的实现
interface IServe {
val name:String
val id:Int
fun save(msg:String) // 抽象方法
fun prints(): Unit { // 方法的实现
println("I'm service $name")
}
}
class MyServe : IServe {
override val name: String
get() = "My_007_Serve"
override val id: Int
get() = 7
override fun save(msg: String) {
super.prints()
println("save message:$msg")
}
}
fun testIServe(): Unit {
val ms = MyServe()
ms.save("[test data]")
}
本文探讨了Kotlin中的抽象类和接口。抽象类不可实例化,包含抽象属性和函数,子类必须实现这些成员并使用`override`关键字。`open`关键字允许子类重写默认final的函数。接口则不能实例化,类可以实现多个接口,并且Kotlin接口可包含默认实现。示例展示了如何定义和使用抽象类及接口。
941

被折叠的 条评论
为什么被折叠?



