s n h m r u

Minimallogo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

s n h m r u
i

Objektorientierung

8. Klassen und Objekte

class Hund(val name: String, var alter: Int) { // Attribute im Konstruktor
    var hunger = 5                // weiteres Attribut mit Startwert

    init {                        // wird beim Erzeugen ausgeführt
        println("$name wurde erzeugt")
    }

    fun bellen() {                // Methode ohne Rückgabe
        println("$name: Wuff!")
    }

    fun istHungrig(): Boolean {   // Methode mit Rückgabe
        return hunger > 3
    }

    override fun toString(): String { // Text für println(hund)
        return "Hund $name ($alter Jahre)"
    }
}

val bello = Hund("Bello", 3)      // Objekt erzeugen (Konstruktoraufruf)
bello.bellen()                    // Methode aufrufen
bello.alter = 4                   // Attribut ändern (nur bei var)
println(bello.name)               // Attribut lesen: → Bello
println(bello)                    // → Hund Bello (4 Jahre)

9. Datenkapselung

class Konto {
    private var pin = 1234        // nur innerhalb der Klasse zugreifbar
    var kontostand = 0.0
        private set               // von außen nur lesbar

    var limit = 100
        set(wert) {               // eigener Setter
            if (wert >= 0) {
                field = wert      // field: der gespeicherte Wert
            }
        }

    val istLeer: Boolean          // abgeleitetes Attribut
        get() = kontostand == 0.0 // eigener Getter

    private fun pinPruefen(eingabe: Int): Boolean { // private Methode
        return eingabe == pin
    }
}

class Mensch(startAlter: Int) {   // ohne val/var: nur Parameter, kein Attribut
    var alter = 0
        set(wert) {
            if (wert >= 0) {
                field = wert
            }
        }

    init {
        alter = startAlter        // Setter prüft auch den Startwert
    }
}

10. Vererbung

open class Tier(val name: String) {     // open: Vererbung erlaubt
    open fun lautGeben() {              // open: darf überschrieben werden
        println("...")
    }
}

class Kuh(name: String) : Tier(name) {  // Kuh erbt von Tier
    override fun lautGeben() {          // Methode überschreiben
        super.lautGeben()               // Methode der Oberklasse aufrufen
        println("Muh")
    }

    fun melken() {
        println("$name wird gemolken")
    }
}

val tier: Tier = Kuh("Berta")           // eine Kuh ist auch ein Tier
tier.lautGeben()                        // → ... Muh (Methode von Kuh)
if (tier is Kuh) {                      // Typ prüfen
    tier.melken()                       // danach als Kuh nutzbar
}

11. Abstrakte Klassen und Interfaces

abstract class Form {                   // davon gibt es keine Objekte
    abstract fun flaeche(): Double      // muss überschrieben werden

    fun beschreiben() {
        println("Fläche: ${flaeche()}")
    }
}

class Quadrat(val seite: Double) : Form() {
    override fun flaeche(): Double {
        return seite * seite
    }
}

interface Zeichenbar {                  // Interface: legt Methoden fest
    fun zeichnen()
}

class Stern : Zeichenbar {              // bei Interfaces keine ()
    override fun zeichnen() {
        println("*")
    }
}

class Kreis(val radius: Double) : Form(), Zeichenbar { // Klasse und Interface
    override fun flaeche(): Double {
        return PI * radius * radius
    }

    override fun zeichnen() {
        println("O")
    }
}

Suche

v
100.123.9.1.2 Objektorientierung
Kopieren durch Anklicken

Rückmeldung geben