Rozhranie (interface) definuje spoločné správanie pre triedy. Na rozdiel od abstraktnej triedy nemôže mať konštruktor ani atribúty (len default hodnoty):
interface Drivable {
fun drive()
}
interface Flyable {
fun fly()
}
class Car : Drivable {
override fun drive() {
println("Jazdim po ceste")
}
}
class Airplane : Drivable, Flyable {
override fun drive() {
println("Taxim na runway")
}
override fun fly() {
println("Letim vo vzduchu")
}
}
fun main() {
val car = Car()
car.drive() // Jazdim po ceste
val plane = Airplane()
plane.drive() // Taxim na runway
plane.fly() // Letim vo vzduchu
}
Rozhranie môže mať default implementáciu funkcií:
interface Loggable {
fun log(message: String) {
println("[LOG] $message")
}
}
class User(val name: String) : Loggable {
fun greet() {
log("User $name was greeted") // pouzijeme default implementaciu
}
}
fun main() {
val user = User("Janko")
user.greet() // [LOG] User Janko was greeted
}
Rozhranie môže definovať atribúty, ale len abstraktné alebo s default implementáciou:
interface Identifiable {
val id: Int // abstraktny atribut
val type: String get() = "default" // default implementacia
}
class User(val id: Int, val name: String) : Identifiable {
override val type: String = "user"
}
fun main() {
val user = User(1, "Janko")
println(user.id) // 1
println(user.type) // user
}
Rozhranie nemôže mať konštruktor - na rozdiel od abstraktnej triedy.
Vytvor rozhranie Ulozitelne s metódou uloz a implementuj ho v triede Dokument.
Vytvor triedu, ktorá implementuje dve rozhrania s rôznymi metódami.
Doplň rozhranie Logovatelne o predvolenú metódu a zavolaj ju z implementujúcej triedy.