Eine class bündelt Daten und Verhalten, der Konstruktor steht im Klassenkopf. Eine case class ist ideal für Daten: Sie hat automatisch toString, equals, copy und Pattern-Matching. Ein trait beschreibt Verhalten, das Klassen mischen können (ähnlich Interfaces mit Implementierung).
Mit object definierst du ein Singleton, zum Beispiel für Hilfsfunktionen.
case class Punkt(x: Int, y: Int)
trait Laut:
def laut: String
class Hund extends Laut:
def laut: String = "Wuff"
class Konto(val inhaber: String, private var stand: Double = 0):
def einzahlen(betrag: Double): Unit =
if betrag > 0 then stand += betrag
def aktuell: Double = stand
@main def klassen(): Unit =
val p = Punkt(1, 2)
println(p.copy(y = 5)) // Punkt(1,5)
println(Hund().laut)
val k = Konto("Mia")
k.einzahlen(50)
println(k.aktuell)Merke
case classfür Daten mitcopyund Vergleichtraitbeschreibt mischbares Verhaltenobjectist ein Singleton
Aufgabe
Lege eine `case class Buch(titel, seiten)` an und kopiere sie mit anderer Seitenzahl.