抽象类表示“is-a”的关系,而接口所代表的是“has-a”的关系。
抽象类与抽象成员
抽象是相对于具象而言的。
image.pngabstract class Shape {
abstract var width: Double
abstract var height: Double
abstract fun area(): Double
}
class Rectangle(override var width: Double, override var height: Double) : Shape() {
private val name: String? = null
override fun area(): Double {
return PI * width * height
}
companion object {
const val PI = 3.14
}
}
- 能够继承父类的public和protected成员变量;
- 不能继承父类的private成员变量;
- 对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能继承;
- 对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中的同名成员变量,需要使用super关键字进行引用
接口
接口是一种比抽象类更加抽象的“类”
接口本身代表的是一种“类型”的概念。
接口是用来建立类与类之间的协议
Kotlin与Java一样,继承只能存在一个父类(单继承)
interface ProjectPrivate {
val name: String
val owner: String
fun save(project: Project)
fun print() {
// println()
}
}
class ProjectPrivateImpl(override val name: String, override val owner: String) : ProjectPrivate {
override fun save(project: Project) {
}
}
网友评论