Tartalomjegyzék

< Kotlin

Kotlin Objektum Orientált Programozás

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.

oop.kt
class Dolgozo() {
    lateinit var nev: String
    var kor = 0
 
}
 
fun main() {
    var feri = Dolgozo()
    println(feri.nev)
}

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.

Az infix függvényekről itt olvashatsz.

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:

enum.tk
enum class Egtaj(val egtaj: String) {
    ESZAK("észak"),
    DEL("dél"),
    KELET("kelet"),
    NYUGAT("nyugat"),
    ;
    override fun toString(): String {
        return egtaj
    }
}
 
fun main() {
    var egtaj = Egtaj.ESZAK
    println(egtaj)
}

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()
 
}