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()
函數的實現,因爲將它也聲明爲abstract
。 Honda
類的抽象函數run()
的實現由City
類提供。
抽象類示例
在此示例中,包含抽象函數simpleInterest()
的抽象類:Bank
,它接受三個參數p
,r
和t
。 SBI
類和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