Interfejsi funkcionišu na sličan način kao i u Javi. Dakle, u interfejsu se nalazi kolekcija metoda koje klasa koja implementira taj interfejs mora da implementira. Osnovna sintaksa interfejsa izgleda ovako:
interface ime_interfejsa { fun ime_metoda_1(parametri...) { naredbe... } }
Da bi klasa implementirala interfejs, mora da implementira sve metode tog interfejsa (preko override) i da naznači da implementira interfejs kao u sledećem primeru:
interface ime_interfejsa { fun ime_metoda_1(parametri...) { naredbe... } } class ime_klase(parametri...) : ime_interfejsa { naredbe... }
class ime_klase(parametri...) : ime_interfejsa_1, ime_interfejsa_2 {
naredbe...
fun metod() {
super<ime_interfejsa_1>.metod()
}
}
Ovaj deo koda prihvata implementaciju prvog interfejsa metoda koji se nalazi u oba interfejsa.
Osim klasa i interfejsa, u Kotlinu postoji i posebna vrsta klasa koja je prilagođena za čuvanje podataka. Takve klase se zovu data klase i veoma su važne kada je u pitanju rad sa bazama podataka. Data klase se definišu isto kao i obične klase, samo što im ispred ključne reči
Ovakve klase ne mogu da se nasleđuju, niti mogu da budu apstraktne. U slučaju da je data klasa potklasa neke klase u kojoj su definisani neki od gorenavedenih metoda i tipovi se poklapaju, onda će kompajler već definisane metode preuzeti i neće automatski generisati svoje. Za metode copy() i componentN nije moguće unutar klase ponuditi svoju definiciju.
Recimo, na sledećem primeru smo kreirali klasu Person koja čuva imena ljudi i njihove godine. Primetimo kako se ovaj kod lakše održava nego da smo pisali običnu klasu.
data class Person(val name: String, val surname: String, var age: Int) fun main() { val p = Person("David", "Davidovic", 15) println(p.toString()) }
Ukoliko ima potrebe za tim, veoma lako se može iz svakog objekta data klase u jednoj liniji koda izdvojiti svaki atribut klase. Na našem primeru, to funkcioniše ovako:
val (name, surname, age) = p
Svaka od definisanih promenljivih dobija po jedan atribut od objekta p, u onom redu u kojem su ti atributi definisani.