- 抽象类概念
- 抽象类声明和实现
一、抽象类概念
-
抽象类:被 abstract 关键字修饰的类(class) 被称为抽象类,抽象类通常包含 0 - N 个抽象函数,和 0 - N 个抽象属性,以及 0 - N 个具体函数及属性。
-
抽象函数:被 abstract 关键字修饰的函数(fun) 被称为抽象函数;抽象函数不能有方法体。
-
抽象属性:被 abstract 关键字修饰的属性(var|val) 被称为抽象属性;抽象属性没有初始值,也没有 setter 和 getter 访问器。
注意:抽象函数和抽象属性只能在抽象类中声明,并且无需对抽象类或抽象成员标注 open 注解。
二、抽象类声明和实现
kotlin 中使用关键字 abstract 声明抽象类,及抽象成员;并且无需对抽象类或抽象成员标注 open 注解。
abstract class BaseAbs
abstract class Figure : BaseAbs() { // 1️⃣
abstract fun onDraw() // 抽象函数,无函数体 2️⃣
abstract val name: String // 抽象属性,无初始值,无getter和setter访问器 3️⃣
val cname: String = "几何图形" // 具体属性 4️⃣
fun display() = println(name) // 具体函数 5️⃣
}
- 代码第1️⃣行声明了抽象类,在类前使用关键字 ** abstract** 修饰,并且不需要使用 open 修饰,默认是 open。
- 代码第2️⃣行声明了抽象函数,在函数前使用关键字 ** abstract** 修饰,并且不需要使用 open 修饰,默认是 open,抽象函数没有函数体。
- 代码第3️⃣行声明了抽象属性,在属性前使用关键字 ** abstract** 修饰,抽象属性不能设置初始值,并且没有 setter 和 getter访问器。
- 代码第4️⃣行是具体属性,可以设置初始值,也可以有 setter 和 getter 访问器。
- 代码第5️⃣行是具体函数,它有函数体。
注意:如果一个成员函数或属性被声明为抽象的,那么这个类也必须声明为抽象的。而且一个抽象类中,可以有 0 - N 个抽象函数或属性,以及 0 - N 个具体函数或属性。
// Figure具体实现类
class Ellipse: Figure() {
override val name: String
get() = "椭圆形"
override fun onDraw() {
println("绘制椭圆形...")
}
}
class Triangle(override val name: String) : Figure() {
override fun onDraw() {
println("绘制三角形...")
}
}
class Rectangle: Figure() {
override val name: String = "矩形"
override fun onDraw() {
println("绘制矩形...")
}
}
网友评论