Kotlin抽象類

使用abstract關鍵字聲明的類稱爲抽象類。 無法實例化抽象類。 意思是,不能創建抽象類的對象。 顯式使用abstract關鍵聲明類,才能表示抽象類的方法和屬性,否則它是非抽象的。

抽象類聲明

abstract class A {  
    var x = 0  
    abstract fun doSomething()  
}

抽象類是部分定義的類,方法和屬性,它們不是實現,但必須在派生類中實現。 如果派生類沒有實現基類的屬性或方法,那麼它也是一個抽象類。

抽象類或抽象函數不需要使用open關鍵字進行批註,因爲它們默認是開放的。 抽象成員函數不包含實現主體。 如果成員函數在抽象類中包含有函數的實現,則不能將聲明爲abstract

具有抽象方法的抽象類的示例

在這個例子中,有一個抽象類Car包含一個抽象函數run()run()函數的實現由它的子類Honda提供。

abstract class Car{
    abstract fun run()
}
class Honda: Car(){
    override fun run(){
        println("Honda is running safely..")
    }
}
fun main(args: Array<String>){
    val obj = Honda()
    obj.run();
}

執行上面示例代碼,得到以下結果 -

Honda is running safely..

非抽象的open成員函數可以在抽象類中重載。

open class Car {
    open fun run() {
        println("Car is running..")
    }
}
abstract class Honda : Car() {
    override abstract fun run()
}
class City: Honda(){
    override fun run() {
        //  TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        println("Honda City is running..")
    }
}
fun main(args: Array<String>){
    val car = Car()
    car.run()
    val city = City()
    city.run()
}

執行上面示例代碼,得到以下結果 -

Car is running..
Honda City is running..

在上面的例子中,一個抽象類Honda擴展了Car類和它的run()函數。 Honda類覆蓋Car類的run()函數。 Honda類沒有給出run()函數的實現,因爲將它也聲明爲abstractHonda類的抽象函數run()的實現由City類提供。

抽象類示例

在此示例中,包含抽象函數simpleInterest()的抽象類:Bank,它接受三個參數prtSBI類和PNB類提供simpleInterest()函數的實現並返回結果。

abstract class Bank {
    abstract fun simpleInterest(p: Int, r: Double, t: Int) :Double
}

class SBI : Bank() {
    override fun simpleInterest(p: Int, r: Double, t: Int): Double{
        return (p*r*t)/100
    }
}
class PNB : Bank() {
    override fun simpleInterest(p: Int, r: Double, t: Int): Double{
        return (p*r*t)/100
    }
}
fun main(args: Array<String>) {
    var sbi: Bank = SBI()
    val sbiint = sbi.simpleInterest(1000,5.0,3)
    println("SBI interest is $sbiint")
    var pnb: Bank = PNB()
    val pnbint = pnb.simpleInterest(1000,4.5,3)
    println("PNB interest is $pnbint")
}

執行上面示例代碼,得到以下結果 -

SBI interest is 150.0
PNB interest is 135.0