pkj 2005/1 stefan dissmann abstrakte methode zusammenfassung: abstrakte methode definiert nur die...

39
PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode • definiert nur die Signatur einer Methode • besitzt keinen Methodenrumpf • ist nicht ausführbar • erzwingt eine abstrakte Klasse • muss in Unterklassen implementiert werden • kann zum Formulieren von Algorithmen eingesetzt werden • Schlüsselwort: abstract

Upload: faramund-bodmer

Post on 05-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/1Stefan Dissmann

Abstrakte Methode

Zusammenfassung:

Abstrakte Methode• definiert nur die Signatur einer Methode• besitzt keinen Methodenrumpf• ist nicht ausführbar• erzwingt eine abstrakte Klasse• muss in Unterklassen implementiert werden• kann zum Formulieren von Algorithmen eingesetzt

werden

• Schlüsselwort: abstract

Page 2: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/2Stefan Dissmann

Abstrakte Klasse

Zusammenfassung:

Abstrakte Klasse• wird durch nur eine abstrakte Methode erzwungen• kann keine Objekte erzeugen• muss von (konkreten) Unterklassen implementiert

werden

• muss nicht unbedingt abstrakte Methoden besitzen

• Schlüsselwort: abstract

Page 3: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/3Stefan Dissmann

Interface

Sonderfall:

Interface ähnelt einer Klasse, • die nur abstrakte Methoden enthält• dient nur der Definition einer Benutzungsschnittstelle• enthält keine Realisierung

• Schlüsselwort: interface

Page 4: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/4Stefan Dissmann

Interface

public interface Vergleichbar {

boolean groesser(Vergleichbar v);

}

Interface

• kann zur Typisierung von Referenzen eingesetzt werden:Vergleichbar ref;

• kann geerbt werden von anderen Interfaces:interface X extends Vergleichbar …

• kann durch Klassen implementiert werden:class K implements Vergleichbar …

Page 5: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/5Stefan Dissmann

Interface

Anmerkungen:

• Klasse kann Klasse erben undzugleich Interface implementierenBsp.: class K extends L implements I, J, K …

• Klasse besitzt höchstens eine Oberklasse, aber• Klasse kann mehrere Interfaces implementieren und• Interface kann mehrere Interfaces erben

Page 6: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/6Stefan Dissmann

Klassen-Interface-hierarchie

<<abstract>>

A

<<interface>>

W

K

<<interface>>

V

<<interface>>

X

<<interface>>

Y

<<interface>>

Z

Object

Page 7: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/7Stefan Dissmann

Klasse - Interface

Warum ist mehrfaches Erben/Implementieren bei Interfaces erlaubt

- und nicht bei Klassen?

Page 8: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/8Stefan Dissmann

Klasse - Interface

Warum ist mehrfaches Erben/Implementieren bei Interfaces erlaubt

- und nicht bei Klassen?

Klasse vererbt implementierte Methoden zu gleicher Signatur eventuell mehrere Implementierungen

Object

A B

C

Page 9: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/9Stefan Dissmann

Klasse - Interface

Warum ist mehrfaches Erben/Implementieren bei Interfaces erlaubt

- und nicht bei Klassen?

Klasse vererbt implementierte Methoden zu gleicher Signatur eventuell mehrere Implementierungen

Object

A B

C

toString()

toString()toString()

toString()??

Page 10: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/10Stefan Dissmann

Klasse - Interface

Warum ist mehrfaches Erben/Implementieren bei Interfaces erlaubt

- und nicht bei Klassen?

Klasse vererbt implementierte Methoden zu gleicher Signatur eventuell mehrere Implementierungen JAVA verhindert das Auftreten des Problems

Page 11: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/11Stefan Dissmann

Klasse - Interface

Warum ist mehrfaches Erben/Implementieren bei Interfaces erlaubt

- und nicht bei Klassen?

Klasse vererbt implementierte Methoden zu gleicher Signatur eventuell mehrere Implementierungen JAVA verhindert das Auftreten des Problems

Interface vererbt nur Methodenköpfe (Signaturen) gleiche Signaturen sind textuell gleich gleiche Signaturen fallen beim Erben/Implementieren

zusammen das Problem tritt nicht auf!

Page 12: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/12Stefan Dissmann

Interfaces und abstrakte Klassen

Was soll der ganze Unfug? Klassen abstrakte Klassen Interfaces

erben und vererben

implementieren

Kompatibilität von Referenzen

Page 13: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/13Stefan Dissmann

Design by Contract

Idee:

Klasse bietet anderen Klassen Funktionalität/Leistung an

durch Methoden

Page 14: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/14Stefan Dissmann

Design by Contract

Idee:

Klasse bietet anderen Klassen Funktionalität/Leistung an

durch Methoden

Klasse erwartet Funktionalität/Leistung von anderen Klassen

in Form von Methoden

Page 15: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/15Stefan Dissmann

Design by Contract

Idee:

Klasse bietet anderen Klassen Funktionalität/Leistung andurch Methoden

Klasse erwartet Funktionalität/Leistung von anderen Klassen

in Form von Methoden

Abstimmung erfolgt durch Verhandeln!

Page 16: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/16Stefan Dissmann

Design by Contract

Idee:

Abstimmung erfolgt durch Verhandeln!

geht nur mit beiden Partnern einzelner Partner formuliert Anforderungen Interface ist Anforderungsbeschreibung

Page 17: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/17Stefan Dissmann

Page 18: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/18Stefan Dissmann

Klassen

Anmerkung 1:

Geerbt-werden kann Klasse nicht verhindern,aber die Redefinition ihrer Methoden in Unterklassen:

public class Liste {

final public void fuegeAn(…) { … }

Schlüsselwort final verhindert erneute Definition in Unterklassen

Page 19: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/19Stefan Dissmann

Klassen

Anmerkung 1:

final kann auch benutzt werden, um Konstante zu definieren!

public class Liste {

final private int maxLaenge = 50;

final public void fuegeAn(…) { … }

Schlüsselwort final verhindert eine erneute Zuweisung an Attribut.

Page 20: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/20Stefan Dissmann

Klassen

Anmerkung 2:

Objekte können explizit auf Klassenzugehörigkeit überprüft werden:

Element el = new Element();

dann ergeben folgende Ausdrücke true:el instanceof Object

el instanceof Element

el instanceof Vergleichbar (falls Element Vergleichbar implementiert)

Page 21: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/21Stefan Dissmann

Klassen

Anmerkung 2:

Objekte können explizit auf Klassenzugehörigkeit überprüft werden:

Element el = new Element();

dann ergeben folgende Ausdrücke true:el instanceof Object

el instanceof Element

el instanceof Vergleichbar (falls Element Vergleichbar implementiert)

Operator

Page 22: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/22Stefan Dissmann

Klassen

Anmerkung 2:

Objekte können explizit auf Klassenzugehörigkeit überprüft werden:

Element el = new Element();

dann ergeben folgende Ausdrücke true:el instanceof Object

el instanceof Element

el instanceof Vergleichbar (falls Element Vergleichbar implementiert)Anwendung aber häufig schlechter Stil

?

Page 23: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/23Stefan Dissmann

Klassen

Statische Methoden

• bekannt (und genutzt) seit der ersten Vorlesung:

public static void main(String[] args) { … }

Page 24: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/24Stefan Dissmann

Klassen

Statische Methoden

• bekannt (und genutzt) seit der ersten Vorlesung:

public static void main(String[] args) { … }

Page 25: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/25Stefan Dissmann

Klassen

Statische Methoden

• bekannt (und genutzt) seit der ersten Vorlesung:

public static void main(String[] args) { … }

• Konsequenz: main kann ausgeführt werden,ohne dass ein Objekt der Klasse erzeugt werden

muss!

Page 26: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/26Stefan Dissmann

Statische methoden

Kpublic void m() …

public static void

s() …

Page 27: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/27Stefan Dissmann

Statische methoden

Kpublic void m() …

public static void

s() …

r = new K();m() …

Page 28: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/28Stefan Dissmann

Statische methoden

Kpublic void m() …

public static void

s() …

r

m() …

Page 29: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/29Stefan Dissmann

Statische methoden

Kpublic void m() …

public static void

s() …

r

m() …

möglich ist:r.m();

Page 30: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/30Stefan Dissmann

Statische methoden

Kpublic void m() …

public static void

s() …

r

m() …

möglich ist:r.m();möglich ist auch:

K.s();

Page 31: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/31Stefan Dissmann

Statische methoden

Kpublic void m() …

public static void

s() …

r

m() …

möglich ist:r.m();und auch:r.s();

möglich ist auch:K.s();

Page 32: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/32Stefan Dissmann

Statische Methoden

Zusammenfassung:

Statische Methoden• können über Referenzen aufgerufen werden• können über den Klassennamen aufgerufen werden

benötigen also kein Objekt zur Ausführung können daher nicht auf Eigenschaften eines Objekts

zugreifen,können also keine normalen Methoden oder

Attribute nutzen,(die nur in Objekten verfügbar sind)

Page 33: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/33Stefan Dissmann

Statische Methoden

Zusammenfassung:

Statische Methoden• können über Referenzen aufgerufen werden• können über den Klassennamen aufgerufen werden

benötigen also kein Objekt zur Ausführung

können daher nicht auf Eigenschaften eines Objekts zugreifen,

können also keine normalen Methoden oder Attribute nutzen,

(die nur in Objekten verfügbar sind)

statische Methoden benötigen statische Attribute

Page 34: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/34Stefan Dissmann

Statische Attribute

Beispiel:

public class Objektzaehler {

private static int anzahl = 0;

public Objektzaehler() {

anzahl++;

}

public static int gibAnzahl() {

return anzahl;

}

}

Page 35: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/35Stefan Dissmann

Statische Attribute

Beispiel:

public class Objektzaehler {

private static int anzahl = 0;

public Objektzaehler() {

anzahl++;

}

public static int gibAnzahl() {

return anzahl;

}

}

Page 36: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/36Stefan Dissmann

Statische Attribute

Beispiel:

public class Objektzaehler {

private static int anzahl = 0;

public Objektzaehler() {

anzahl++;

}

public static int gibAnzahl() {

return anzahl;

}

}

Page 37: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/37Stefan Dissmann

Statische Attribute

Beispiel (Fortsetzung):

Objektzaehler oz;

oz = new Objektzaehler();

oz = new Objektzaehler();

oz = new Objektzaehler();

System.out.println(oz.gibAnzahl());

System.out.println(Objektzaehler.gibAnzahl());

Page 38: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/38Stefan Dissmann

Statische Attribute

Beispiel (Fortsetzung):

Objektzaehler oz;

oz = new Objektzaehler();

oz = new Objektzaehler();

oz = new Objektzaehler();

System.out.println(oz.gibAnzahl());

System.out.println(Objektzaehler.gibAnzahl());

Liefert: 3

3

Page 39: PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PKJ 2005/39Stefan Dissmann

Statische Attribute

Anmerkung:

System ist eine Klasse

out ist ein statisches Attribut in System, und zwareine Referenz auf ein Objekt (OutputStream)

println ist eine Methode der Klasse OutputStream

System.out.println(…)