• Keine Ergebnisse gefunden

Programmierkurs Java i S

N/A
N/A
Protected

Academic year: 2021

Aktie "Programmierkurs Java i S"

Copied!
11
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

i S

Dr.-Ing. Dietrich Boles

Programmierkurs Java

UE 17 - Polymorphie

(2)

i S

Gliederung

– Definition – Beispiel

– Protokolleinschränkung – Typumwandlung

– Beispiel Stack

– Zusammenfassung

(3)

i S

Definition

Polymorphie:

– Objektvariablen als auch Objekte haben einen Typ:

T

1

objVar = new T

2

();

– Polymorphie ist die Fähigkeit einer Objektvariablen vom Typ T

1

, auf Objekte von Klassen eines anderen Typs T

2

verweisen zu können – in Java: T

2

muss Unterklasse von T

1

sein

– Protokoll des Objektes ist auf das Protokoll von T

1

eingeschränkt, d.h. über die Objektvariable lassen sich nur die Methoden von T

1

aufrufen

– Hintergrund: Protokoll von T

1

ist Teilmenge von Protokoll von T

2

– Relevanz: Compilierzeit

(4)

i S

Beispiel

 Sei Hund eine direkte oder indirekte Unterklasse von Tier .

Tier t = new Hund(); // Polymorphie

static void streicheln(Tier obj) { ... } Hund bello = new Hund();

streicheln(bello); // Polymorphie

Hund max = new Tier(); // Fehler Tier t = new Apfel(); // Fehler

Tier

Hund

Apfel

(5)

i S

Protokolleinschränkung

class Person { String name;

Person(String name) { this.name = name; } void print() { IO.println(name); }

}

class Mitarbeiter extends Person { String buero;

Mitarbeiter(String name, String buero) { super(name); this.buero = buero;

}

void changeBuero(String neuB) { buero = neuB; } }

class PersonenTest {

public static void main(String[] args) {

Mitarbeiter kai = new Mitarbeiter("Kai Meyer", "E 67");

Person karl = new Mitarbeiter("Karl Schmidt", "E 50");

kai.changeBuero("E 69"); // ok!

karl.changeBuero("E 68"); // Fehler (Protokolleinschr.) } }

(6)

i S

Typumwandlung

 Typumwandlung (Typecast) von Oberklasse auf Unterklasse explizit möglich (allerdings u.U. unsicher!)

class Tier { ... }

class Hund extends Tier { ... } class Katze extends Tier { ... } class Apfel { ... }

Tier t = new Hund();

Hund h1 = t; // Syntaxfehler!

Hund h2 = (Hund)t; // ok

Katze k = (Katze)t; // syntaktisch ok,

// jedoch Laufzeitfehler Apfel a = (Apfel)t; // Syntaxfehler

Tier

Katze Hund

Apfel

(7)

i S

Beispiel Stack (1)

 Vorteil der Polymorphie: Wiederverwendbarkeit

class Stack {

Object[] store; // zum Speichern von Daten int current; // aktueller Index

Stack(int size) {

store = new Object[size]; current = -1;

}

boolean isFull() { return current == (store.length-1); } boolean isEmpty() { return this.current == -1; }

void push(Object value) {

this.store[++this.current] = value;

}

Object pop() { return this.store[this.current--]; } }

Erinnerung: Object ist (indirekte) Oberklasse jeder Klasse in Java

(8)

i S

Beispiel Stack (2)

class Rueckwaerts {

public static void main(String[] args) { Stack haufen = new Stack(10);

while (!haufen.isFull()) {

String eingabe = IO.readString("Eingabe:");

haufen.push(eingabe);

}

while (!haufen.isEmpty()) {

String str = (String)haufen.pop();

System.out.println(str);

} } }

(9)

i S

Beispiel Stack (3)

class RueckwaertsInt {

public static void main(String[] args) { Stack haufen = new Stack(10);

while (!haufen.isFull()) {

int zahl = IO.readInt("Eingabe:");

haufen.push(zahl);

}

while (!haufen.isEmpty()) {

int zahl = (Integer)haufen.pop();

System.out.println(zahl);

} } }

(10)

i S

Beispiel Stack (4)

class Akte { int nummer;

Akte(int n) { this.nummer = n; }

void print() { IO.println(this.nummer); } }

class Verwaltung {

public static void main(String[] args) { Stack haufen = new Stack(8);

while (!haufen.isFull()){

haufen.push(new Akte(IO.readInt("Zahl: ")));

}

while (!haufen.isEmpty()) {

Akte akte = (Akte)haufen.pop();

akte.print();

} }

(11)

i S

Zusammenfassung

 Polymorphie: Fähigkeit einer Objektvariablen vom Typ T

1

, auf Objekte von Klassen eines anderen Typs T

2

verweisen zu

können, wobei in Java T

2

Unterklasse von T

1

sein muss

 Vorteil der Polymorphie: flexible Wiederverwendbarkeit von

Klassen

Referenzen

ÄHNLICHE DOKUMENTE

▪ Klassen dürfen nicht innerhalb einer anderen Klasse definiert werden (gilt nur für uns!). ▪ Wichtig: Diese Regeln werden später noch

– Klassenbezeichner muss Name einer gültigen Klasse sein – Bezeichner sind Objektvariablen ("Namen für Objekte") – Objektvariablen sind Referenzvariablen}. –

 für jede Klasse existiert nur eine Instanz eines Klassen- Attributs.  alle Objekte der Klasse haben

suchen: prevElem mit prevElem.next == oldElem prevElem.next = oldElem.next;. next

 Überschreiben von Methoden: Ersetzung der Implementierung einer Methode einer Oberklasse durch eine neue. Implementierung; die Methoden müssen identische Signaturen

 Klassenbibliothek: Sammlung von nützlichen, häufig gebrauchten Klassen, die (anderen) Programmierern zur Verfügung gestellt werden..  Java-Packages: Hilfsmittel zur

 In einer Datei können mehrere Klassen definiert werden, aber nur eine darf eine public-Klasse sein. Der Name der Datei muss in diesem Fall gleich dem Namen der

– java.lang: Basis-Klassen (System, Object, Runtime, String, ...) – java.lang.reflect: Java Reflection API (Introspektion,