Abstraktná trieda je trieda, ktorá nemôže byť priamo instanciovaná. Slúži ako základ pre iné triedy a môže obsahovať abstraktné funkcie (bez implementácie) aj bežné funkcie:
abstract class Shape {
abstract fun area(): Double
abstract fun perimeter(): Double
fun describe() {
println("Obsah: ${area()}, Obvod: ${perimeter()}")
}
}
class Rectangle(val width: Double, val height: Double) : Shape() {
override fun area() = width * height
override fun perimeter() = 2 * (width + height)
}
class Circle(val radius: Double) : Shape() {
override fun area() = Math.PI * radius * radius
override fun perimeter() = 2 * Math.PI * radius
}
fun main() {
val rect = Rectangle(5.0, 3.0)
val circle = Circle(4.0)
rect.describe() // Obsah: 15.0, Obvod: 16.0
circle.describe() // Obsah: 50.265..., Obvod: 25.132...
}
Abstraktná trieda môže mať konštruktor, na rozdiel od rozhrania.
// Abstraktna trieda - ma atributy a konstruktor
abstract class Vehicle(val speed: Int) {
abstract fun start()
}
// Rozhranie - nema atributy ani konstruktor
interface Drivable {
fun drive()
}
V jednej triede môžeme dediť len z jednej triedy (aj abstraktnej), ale implementovať viacero rozhraní.
Vytvor abstraktnú triedu Zamestnanec s abstraktnou metódou na výpočet mzdy.
Implementuj triedy HodinovyZamestnanec a PevnyZamestnanec, ktoré metódu vypočítajú rozdielne.
Pridaj do abstraktnej triedy konkrétnu metódu na výpis mena a použi ju v oboch podtriedach.