Abstract classes: абстрактные классы Kotlin

Класс, объявленный с помощью ключевого слова abstract, называется абстрактным классом. Абстрактный класс Kotlin не может быть создан. Значит, мы не можем создать объект абстрактного класса. Метод и свойства абстрактного класса не являются абстрактными, если они явно не объявлены как абстрактные.

Объявление абстрактного класса

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

Абстрактные классы — это частично определенные классы, методы и свойства, которые не являются реализацией, но должны быть реализованы в производном классе. Если производный класс не реализует свойства базового класса, он также считается абстрактным классом.

Абстрактный класс или абстрактную функцию в Котлин не нужно аннотировать ключевым словом open, поскольку они открыты по умолчанию. Абстрактная функция-член не содержит своего тела. Функция-член не может быть объявлена как абстрактная, если она содержится в теле абстрактного класса.

Пример абстрактного класса с абстрактным методом

В этом примере есть абстрактный класс 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){ 
val obj = Honda() 
obj.run(); 
} 

Выход:

Honda is running safely.. 

Неабстрактная открытая функция-член может быть переопределена в абстрактном классе.

 
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){ 
val car = Car() 
car.run() 
val city = City() 
city.run() 
} 

Выход:

Car is running.. 
Honda City is running.. 

В приведенном выше примере абстрактный класс Honda расширяет класс Car и его функцию run(). Класс Honda переопределяет функцию run() класса Car. Класс Honda не дает реализации функции run(), так как она также объявлена как абстрактная. Реализация абстрактной функции run() класса Honda обеспечивается классом City.

Пример реального сценария абстрактного класса

В этом примере абстрактный класс Bank, содержащий абстрактную функцию simpleInterest(), принимает три параметра 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) { 
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 

Оцените статью