Tartalomjegyzék
Kotlin Objektum Orientált Programozás
- Szerző: Sallai András
- Copyright © Sallai András, 2020
- Web: https://szit.hu
Osztály
class Dolgozo { var nev = "Névtelen" var kor = 0 }
class Dolgozo { var nev = "Nagy János" var kor = 35 } fun main() { var janos = Dolgozo() janos.nev = "Nagy János" println(janos.nev) }
Konstruktor használata
class Dolgozo { var nev: String var kor: Int init { nev = "Névtelen" kor = 0 } }
A konstruktor paraméterei:
- oop.kt
class Dolgozo(atvettNev: String, atvettKor: Int) { var nev: String var kor: Int init { nev = atvettNev kor = atvettKor } } fun main() { var janos = Dolgozo("Nagy János", 25) var lajos = Dolgozo("Pere Lajos", 37) println(janos.nev) println(lajos.nev) }
Konstruktor többféle paraméterrel:
- oop.kt
class Dolgozo(atvettNev: String, atvettKor: Int) { var nev: String var kor: Int init { nev = atvettNev kor = atvettKor } constructor(atvettNev: String) : this(atvettNev, 0) constructor() : this("Névtelen", 0) } fun main() { var jani = Dolgozo("Nagy János", 25) var lali = Dolgozo("Pere Lajos") var feri = Dolgozo() println(jani.nev) println(lali.nev) println(feri.nev) }
Setter/Getter
- oop.kt
class Dolgozo() { var nev = "Névtelen" var kor = 0 set(value) { if(value < 0) throw IllegalArgumentException( "Nem lehet negatív értéket megadni") field = value } get() = field /2 } fun main() { var feri = Dolgozo() feri.kor = 35 println(feri.kor) }
A beállító kötelezően a megfelelő mező után kell álljon.
Új tulajdonság felvétele a getterrel:
- oop.kt
class Dolgozo() { var nev = "Névtelen" var kor = 0 set(value) { if(value < 0) throw IllegalArgumentException( "Nem lehet negatív értéket megadni") field = value } get() = field / 2 val korBeallitva get() = kor != 0 } fun main() { var feri = Dolgozo() feri.kor = 35 if(feri.korBeallitva) println("beállítva") else println("Nincs beállítva") }
Tagfüggvények
- oop.kt
class Dolgozo() { var nev = "Névtelen" var kor = 0 fun udvozles() { println("Szia") } } fun main() { var feri = Dolgozo() feri.udvozles() }
Előkészítés később
Ha egy tulajdonság nem primitív típusú és nem lehet null, akkor használható a lateinit módosító. Ez lehetővé teszi, hogy ne legyen előkészítve egy tulajdonság.
Infix függvények
- oop.kt
class Dolgozo() { var nev = "Névtelen" var kor = 0 infix fun feleseg(hitves: Dolgozo) { println("$nev felesége: ${hitves.nev}") } } fun main() { var feri = Dolgozo() var mari = Dolgozo() feri.nev = "Váltó Ferenc" mari.nev = "Pontos Mária" feri feleseg mari }
A feri és mari objektum között a feleseg függvény mintegy infix operátor működik.
Operátorok
A legtöbb operátor előredefiniált névvel rendelkezik, amelyek felhasználhatók osztályok közötti műveletekre.
A következő kódban a + operátor számra határozunk meg egy műveletet.
- oop.kt
class Dolgozo() { var nev = "Névtelen" var kor = 0 operator fun plus(hitves: Dolgozo) { println("$nev felesége: ${hitves.nev}") } } fun main() { var feri = Dolgozo() var mari = Dolgozo() feri.nev = "Váltó Ferenc" mari.nev = "Pontos Mária" feri + mari }
A megoldás hasonlít az infix függvényekhez.
Enum
Ha csak arra van szükség, hogy olyan változónk legyen, amely egyetlen értéket képes felvenni, és ezek az értékek különböznek egymástól, akkor használjuk az enum osztályt.
- enum.tk
enum class Egtaj { ESZAK, DEL, KELET, NYUGAT, } fun main() { var egtaj = Egtaj.ESZAK println(egtaj) }
Szöveg meghatározása:
Kivételkezelés
- kivetel.kt
fun osztas(szamlalo : Int, nevezo: Int): Int { try { return szamlalo / nevezo }catch(e: ArithmeticException) { println(e) return 0 } } fun main() { println(osztas(3, 0)) }
A futtatás eredménye:
java -jar kivetel.jar java.lang.ArithmeticException: / by zero 0
A return a try elé:
- kivetel.kt
fun osztas(szamlalo : Int, nevezo: Int): Int { return try { szamlalo / nevezo }catch(e: ArithmeticException) { 0 } } fun main() { println(osztas(3, 0)) }
A kivétel kezelése máshol:
- kivetel.kt
fun osztas(szamlalo : Int, nevezo: Int): Int { return try { probaOsztas(szamlalo, nevezo) }catch(e: ArithmeticException) { 0 } } fun probaOsztas(szamlalo : Int, nevezo: Int): Int { return szamlalo / nevezo } fun main() { println(osztas(3, 0)) }
Öröklés
- orokles.kt
open class Dolgozo { var nev = "Névtelen" var kor = 85 var beosztas = "ismeretlen" } class Mernok : Dolgozo() { var diploma = "AC834" } fun main() { var janos = Mernok() janos.nev = "Nagy János" println(janos.nev) }
Metódus felülírása:
- orokles.kt
open class Dolgozo { var nev = "Névtelen" var kor = 85 var beosztas = "ismeretlen" open fun dolgozik() { println("lapátol") } } class Mernok() : Dolgozo() { var diploma = "AC834" override fun dolgozik() { println("számol") } } fun main() { var janos = Mernok() janos.dolgozik() }
Egy metódus felülírásához az eredeti osztályban szükséges az open módosító.
Ha szeretnénk az eredeti osztály metódusát is meghívni:
- orokles.kt
open class Dolgozo { var nev = "Névtelen" var kor = 85 var beosztas = "ismeretlen" open fun dolgozik() { println("lapátol") } } class Mernok() : Dolgozo() { var diploma = "AC834" override fun dolgozik() { println("számol") super.dolgozik() } } fun main() { var janos = Mernok() janos.dolgozik() }