Montag, 25. Mai 2009

 

Vererbung

Vererbung ist eines der wichtigsten Prinzipen der objektorientierten Programmierung. Man versteht darunter, dass von bereits bestehenden Klassen neue abegeleitet werden können, die zunächst die gleichen Eigenschaften und Methoden besitzen wie ihre Vorgänger. Zusätzlich werden sie jedoch mit neuen Elementen ausgestattet, die entweder Erweiterungen ihrer "Eltern" darstellen oder aber alte Elemente ersetzen.

Ober- und Unterklassen:

Die Oberklasse ist in der Vererbung sozusagen der Vorfahre der Unterklasse. Es ist also die Unterklasse, die alle Eigenschaften und Methoden der Oberklasse erbt.

Basis- und Superklassen:

Alternative Begriffe für das Wort Oberklasse.

Spezialisierung einer Klasse bzw. Verallgemeinerung einer Klasse:

Eine Unterklasse ist eine spezialisierte Version ihrer Oberklasse. Sie hat eben die gleichen Fähigkeiten wie die Oberklasse, erweitert sie aber um einige Neuerungen, die sie spezieller machen.

Beispiel Öffentliches Verkehrsmittel:

UML: Öffentliche verkehrsmittel

class OeffentlichesVerkehrsmittel {
int linie;
int anzahlSitzplaetze;

void tuerenOeffnen() {
System.out.println("öffne Türen");
}

void losfahren() {
System.out.println("fahre los");
}

void anhalten() {
System.out.println("halte an");
}

void blinken(boolean linksBlinken) {
if (linksBlinken)
System.out.println("blinke links");
else
System.out.println("blinke rechts");
}
}

class Bus extends OeffentlichesVerkehrsmittel {
int oelstand;
int tankinhalt;
int reifenProfiltiefe;

void hupen() {
System.out.println("tuut");
}

void abbiegen() {}
void tanken() {}
}

class Strassenbahn extends OeffentlichesVerkehrsmittel {
int fahrspannung;

void klingeln() {
System.out.println("Bim bim");
}

void stromabnehmerAusfahren() {}
void stromabnehmerEinfahren() {}
}

Die Methoden losfahren() und anhalten() wurden in der Oberklasse OeffentlichesVerkehrsmittel zugeordnet. Allerdings weiß jedes Kind, dass der Mechanismus zum Beschleunigen und Abbremsen beim Bus anders funktioniert als bei der Straßenbahn.

Daher sollte man die Methoden losfahren() und anhalten() abstrakt machen und damit auch die Klasse OeffentlichesVerkehrsmittel:

UML: Öffentliche Verkehrsmittel abstrakt

abstract class OeffentlichesVerkehrsmittel {
int linie;
int anzahlSitzplaetze;

void tuerenOeffnen() {
System.out.println("öffne Türen");
}

abstract void losfahren();

abstract void anhalten();

void blinken(boolean linksBlinken) {
if (linksBlinken)
System.out.println("blinke links");
else
System.out.println("blinke rechts");
}
}

class Bus extends OeffentlichesVerkehrsmittel {
int oelstand;
int tankinhalt;
int reifenProfiltiefe;

void losfahren() {
System.out.println("fahre los");
}

void anhalten() {
System.out.println("halte an");
}

void hupen() {
System.out.println("tuut");
}

void abbiegen() {}
void tanken() {}
}

class Strassenbahn extends OeffentlichesVerkehrsmittel {
int fahrspannung;

void losfahren() {
System.out.println("fahre los");
}

void anhalten() {
System.out.println("halte an");
}

void klingeln() {
System.out.println("Bim bim");
}

void stromabnehmerAusfahren() {}
void stromabnehmerEinfahren() {}
}

Polymorphismus:

Damit ist die Möglichkeit gemeint, den gleichen Namen für (mehr oder weniger) gleichartige Operationen zu verwenden, die auf Objekte unterschiedlicher Klassen angewendet werden. Man spricht auch vom überladen (overloading) einer Operation.

Polymorphismus bezeichnet also die Fähigkeit von Objekten, auf die gleichen Anweisungen unterschiedlich zu reagieren. Das gilt sowohl für Objekte unterschiedlicher Klassen als auch für Objekte gleicher Klassen oder sogar für ein und dasselbe Objekt (Überladung).

OeffentlichesVerkehrsmittel fahrzeug1 = new Bus();
OeffentlichesVerkehrsmittel fahrzeug2 = new Strassenbahn();

fahrzeug1.losfahren();
fahrzeug2.losfahren();
fahrzeug1.anhalten();
fahrzeug2.anhalten();

Das alles als Scrapbook-Seite vererbung.jpage für eclipse.

Labels: ,


Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]





<< Startseite

This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]