Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist."—  Präsentation transkript:

1 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

2 PKJ 2005/2 Stefan 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

3 PKJ 2005/3 Stefan 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

4 PKJ 2005/4 Stefan 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 …

5 PKJ 2005/5 Stefan Dissmann Interface Anmerkungen: Klasse kann Klasse erben und zugleich Interface implementieren Bsp.: 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

6 PKJ 2005/6 Stefan Dissmann Klassen-Interface-hierarchie > A > W K > V > X > Y > Z Object

7 PKJ 2005/7 Stefan Dissmann Klasse - Interface Warum ist mehrfaches Erben/Implementieren bei Interfaces erlaubt - und nicht bei Klassen?

8 PKJ 2005/8 Stefan 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 AB C

9 PKJ 2005/9 Stefan 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 AB C toString() toString() ??

10 PKJ 2005/10 Stefan 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

11 PKJ 2005/11 Stefan 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!

12 PKJ 2005/12 Stefan Dissmann Interfaces und abstrakte Klassen Was soll der ganze Unfug? Klassen abstrakte Klassen Interfaces erben und vererben implementieren Kompatibilität von Referenzen

13 PKJ 2005/13 Stefan Dissmann Design by Contract Idee: Klasse bietet anderen Klassen Funktionalität/Leistung an durch Methoden

14 PKJ 2005/14 Stefan 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

15 PKJ 2005/15 Stefan 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 Abstimmung erfolgt durch Verhandeln!

16 PKJ 2005/16 Stefan Dissmann Design by Contract Idee: Abstimmung erfolgt durch Verhandeln! geht nur mit beiden Partnern einzelner Partner formuliert Anforderungen Interface ist Anforderungsbeschreibung

17 PKJ 2005/17 Stefan Dissmann

18 PKJ 2005/18 Stefan 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

19 PKJ 2005/19 Stefan 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.

20 PKJ 2005/20 Stefan 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)

21 PKJ 2005/21 Stefan 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

22 PKJ 2005/22 Stefan 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 ?

23 PKJ 2005/23 Stefan Dissmann Klassen Statische Methoden bekannt (und genutzt) seit der ersten Vorlesung: public static void main(String[] args) { … }

24 PKJ 2005/24 Stefan Dissmann Klassen Statische Methoden bekannt (und genutzt) seit der ersten Vorlesung: public static void main(String[] args) { … }

25 PKJ 2005/25 Stefan 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!

26 PKJ 2005/26 Stefan Dissmann Statische methoden K public void m() … public static void s() …

27 PKJ 2005/27 Stefan Dissmann Statische methoden K public void m() … public static void s() … r = new K(); m() …

28 PKJ 2005/28 Stefan Dissmann Statische methoden K public void m() … public static void s() … r m() …

29 PKJ 2005/29 Stefan Dissmann Statische methoden K public void m() … public static void s() … r m() … möglich ist: r.m();

30 PKJ 2005/30 Stefan Dissmann Statische methoden K public void m() … public static void s() … r m() … möglich ist: r.m(); möglich ist auch: K.s();

31 PKJ 2005/31 Stefan Dissmann Statische methoden K public void m() … public static void s() … r m() … möglich ist: r.m(); und auch: r.s(); möglich ist auch: K.s();

32 PKJ 2005/32 Stefan 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)

33 PKJ 2005/33 Stefan 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

34 PKJ 2005/34 Stefan Dissmann Statische Attribute Beispiel: public class Objektzaehler { private static int anzahl = 0; public Objektzaehler() { anzahl++; } public static int gibAnzahl() { return anzahl; }

35 PKJ 2005/35 Stefan Dissmann Statische Attribute Beispiel: public class Objektzaehler { private static int anzahl = 0; public Objektzaehler() { anzahl++; } public static int gibAnzahl() { return anzahl; }

36 PKJ 2005/36 Stefan Dissmann Statische Attribute Beispiel: public class Objektzaehler { private static int anzahl = 0; public Objektzaehler() { anzahl++; } public static int gibAnzahl() { return anzahl; }

37 PKJ 2005/37 Stefan Dissmann Statische Attribute Beispiel (Fortsetzung): Objektzaehler oz; oz = new Objektzaehler(); System.out.println(oz.gibAnzahl()); System.out.println(Objektzaehler.gibAnzahl());

38 PKJ 2005/38 Stefan Dissmann Statische Attribute Beispiel (Fortsetzung): Objektzaehler oz; oz = new Objektzaehler(); System.out.println(oz.gibAnzahl()); System.out.println(Objektzaehler.gibAnzahl()); Liefert: 3 3

39 PKJ 2005/39 Stefan Dissmann Statische Attribute Anmerkung: System ist eine Klasse out ist ein statisches Attribut in System, und zwar eine Referenz auf ein Objekt ( OutputStream ) println ist eine Methode der Klasse OutputStream System.out.println(…)


Herunterladen ppt "PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist."

Ähnliche Präsentationen


Google-Anzeigen