Raku-Kurs / Anhang 🆕 / Typen und Textmaschinen / Objekte und Klassen / Exercises / Tiere, die sprechen

Lösung: Tiere, die sprechen

Hier ist eine mögliche Lösung der Aufgabe.

Code

class Animal {
    has $.name;
    method speak { '...' }
    method greet { "{$.name} says {self.speak}" }
}

class Dog is Animal { method speak { 'Woof' } }
class Cat is Animal { method speak { 'Meow' } }

for Dog.new(name => 'Rex'), Cat.new(name => 'Tom') -> $pet {
    say $pet.greet;
}

🦋 Du findest den Quellcode in der Datei animal-inheritance.raku.

Ausgabe

Rex says Woof
Tom says Meow

Kommentare

  1. greet ist einmal in der Basisklasse bestimmt, ruft aber self.speak auf. Weil self das tatsächliche Objekt ist, erreicht der Aufruf das eigene speak der Unterklasse.

  2. Das ist Polymorphie: Dasselbe greet erzeugt für einen Hund Woof und für eine Katze Meow, ganz ohne bedingten Code.

Kursnavigation

Tiere, die sprechen   |   Reguläre Ausdrücke und Grammatiken