Appearance
Kapitel 8: Objektorientierte Programmierung fortgeschritten
8.1 Vererbung
Grundlegende Vererbung
dart
class Tier {
void essen() {
print('Tier isst');
}
}
class Hund extends Tier {
// Erbt die essen()-Methode
}Methodenüberschreibung
dart
class Tier {
void geräusch() {
print('Tier macht Geräusch');
}
}
class Hund extends Tier {
@override
void geräusch() {
print('Hund bellt');
}
}super-Schlüsselwort
dart
class Tier {
String name;
Tier(this.name);
void vorstellen() {
print('Ich bin ' + name);
}
}
class Hund extends Tier {
Hund(String name) : super(name);
@override
void vorstellen() {
super.vorstellen(); // Ruft die Methode der Elternklasse auf
print('Ich bin ein Hund');
}
}8.2 Kapselung
Zugriffsmodifikatoren
dart
class Person {
String name; // public (Standard)
int _alter; // private (mit _ beginnend)
// getter
int get alter => _alter;
// setter
set alter(int wert) {
if (wert >= 0) {
_alter = wert;
}
}
}8.3 Polymorphismus
dart
class Tier {
void geräusch() {
print('Tier macht Geräusch');
}
}
class Hund extends Tier {
@override
void geräusch() {
print('Hund bellt');
}
}
class Katze extends Tier {
@override
void geräusch() {
print('Katze miaut');
}
}
void main() {
Tier tier1 = Hund(); // Elternklassen-Referenz zeigt auf Unterklassen-Objekt
Tier tier2 = Katze();
tier1.geräusch(); // Hund bellt
tier2.geräusch(); // Katze miaut
}8.4 Abstrakte Klassen und Schnittstellen
Abstrakte Klassen
dart
abstract class Form {
double fläche(); // Abstrakte Methode
}
class Rechteck extends Form {
double breite;
double höhe;
Rechteck(this.breite, this.höhe);
@override
double fläche() {
return breite * höhe;
}
}Schnittstellen
dart
class Flugfähig {
void fliegen();
}
class Vogel implements Flugfähig {
@override
void fliegen() {
print('Vogel fliegt');
}
}8.5 Praxisbeispiel
dart
abstract class Mitarbeiter {
String name;
double gehalt;
Mitarbeiter(this.name, this.gehalt);
void arbeiten();
void informationen() {
print('Name: ' + name + ', Gehalt: ' + gehalt.toString());
}
}
class Entwickler extends Mitarbeiter {
Entwickler(String name, double gehalt) : super(name, gehalt);
@override
void arbeiten() {
print('Entwickler schreibt Code');
}
}
void main() {
Mitarbeiter entwickler = Entwickler('Alice', 5000);
entwickler.informationen();
entwickler.arbeiten();
}