- 使用
abstract
關(guān)鍵字聲明的類稱為抽象類。 - 無法實(shí)例化抽象類,不能創(chuàng)建抽象類的對象盅抚。
- 顯式使用abstract關(guān)鍵聲明類,才能表示抽象類的方法和屬性倔矾,否則它是非抽象的妄均。
抽象類聲明
abstract class ABClass {
abstract fun doSomething()
}
注意
:
- 抽象類是部分定義方法和屬性的類柱锹,它們實(shí)現(xiàn)類,但必須在子類中實(shí)現(xiàn)丰包。
- 如果子類沒有實(shí)現(xiàn)父類的屬性或方法禁熏,那么它也是一個(gè)抽象類。
- 抽象類或抽象函數(shù)不需要使用open關(guān)鍵字進(jìn)行批注烫沙,因?yàn)樗鼈兡J(rèn)open匹层。
- 抽象成員函數(shù)不包含實(shí)現(xiàn)主體, 如果成員函數(shù)在抽象類中包含有函數(shù)的實(shí)現(xiàn)锌蓄,則不能將聲明為abstract升筏。
抽象類示例
定義一個(gè)Animal抽象類,Animal抽象類包含eat抽象方法瘸爽,它的實(shí)現(xiàn)方法將由子類Dog的eat來實(shí)現(xiàn)您访。
abstract class Animal(var color: String, var size: Int) {
init {
println("Animal color is ${this.color} size is ${this.size}")
}
abstract fun eat()
open fun drink(){
println("Animal drink")
}
}
class Dog(color: String, size: Int) :Animal(color, size){
override fun eat(){
println("${this.javaClass.name} eat")
}
override fun drink(){
println("${this.javaClass.name} drink")
}
fun woof(){
println("${this.javaClass.name} woof")
}
}
fun main(args: Array<String>) {
val dog = Dog("white",3)
dog.eat()
dog.drink()
dog.woof()
}
結(jié)果:
Animal color is white size is 3
Dog eat
Dog drink
Dog woof