EPROG Tutorium #6 Philipp Effenberger Abstract Class Interface Unterschiede / Anwendung abstract class – interface Interface Comparable<Typ> Packages Wünsche? 10. Mai 2005 philipp_effenberger@web.de
Abstrakte Klassen Nur teilweise Implementation der Klasse Kann als „einheitliches“ Grundgerüst für Klassenhierarchien benützt werden (Verhalten, Eigenschaften) abstract class XYZ { … public abstract … methodenname(…) {} protected … methodenname(…) {…} } // abstract class XYZ Methoden ohne Körper! Nur Schnittstellendeklaration, alle abstrakten Methoden müssen in der erbenden Klasse implementiert werden muss überschrieben werden! Konstruktor nicht aufrufbar Variablen können definiert/initialisiert werden (member und static member, z.B. Konstanten wie pi oder euler‘sche Zahl…) 10. Mai 2005 philipp_effenberger@web.de
Interfaces Interface = Spezifikation einer Klasse = Schnittstellen der Klasse = public Methoden eines Objekts Interface selbst ist keine Klasse Hintergrund der Implementierung unbekannt, relevant ist für Benützer nur, worauf zugegriffen werden kann. Ähnlich wie vollkommen abstrakte Klassen interface statt class oder abstract class Eine Klasse kann auch mehrere Interfaces implementieren (→ Mehrfachvererbung möglich!) Ein Interface selbst kann auch mehrere Interfaces implementieren interface name implements x, y, z { int… methodennamen(…){} … } //interface Ermöglichen es, Schnittstelle und Implementation sauber zu trennen 10. Mai 2005 philipp_effenberger@web.de
Interface – Abstract Class Unterschiede/Anwendung Abstract Class z.B.: Subklassen müssen Methoden unterschiedlich implementieren, aber auch einheitliche Methoden vorhanden Festlegung des [Ober]Typs eines Objektes (es wird immer ein speziellerer Untertyp verwendet) Variablen und Konstanten deklarierbar Methoden müssen abstract gekennzeichnet sein, da Implementierung auch möglich Interface z.B.: Mehrfachvererbung eine Klasse muss bestimmte Methode(n) implementieren Über Interface sind mehrere Subklassen ansprechbar private protected static final nicht erlaubt (ausser static final Konstanten) Da alle Methoden abstract, ist Schlüsselwort nicht notwendig 10. Mai 2005 philipp_effenberger@web.de
Interface Comparable<Typ> Objekte müssen Methode compareTo(<Typ>) implementieren Beachte Transitivität und Symmetrie Eigenschaften class NumberObject implements Comparable<Integer> { int i = 0; public int comparaTo( Integer n ) { if( i > n.getValue() ) return –1; else if( i==n.getValue() ) return 0; else return 1; } // compareTo } // NumberObject Ohne Generizität (Typangabe<Typ>) muss wie bei equals gecastet werden Wird z.B. von Arrays.sort, SortedSet,… verwendet 10. Mai 2005 philipp_effenberger@web.de
Packages Packages fassen Klassen zu logischen Einheiten zusammen z.B.: java.lang.Math fasst alle mathematischen Klassen und Konstanten zusammen eprog.jar: EprogIO und EprogException Ähnlich wie Verzeichnisse im Dateisystem . (Punkt) als Trennzweichen zwischen Namen Entweder in echten Verzeichnissen oder in einer .jar-Datei Klasse wird zu Package mit package <packagename> hinzugefügt Mit import <package>.<class> wird eine einzelne Klasse aus einem Package importiert (mit * statt <class> gesamte Package; aber nicht rekursiv) Das Package java.lang muss nicht importiert werden 10. Mai 2005 philipp_effenberger@web.de
Wünsche? Vererbung Beispiele Datentypen dynamisch/statisch in Bezug zum Kompiler Generizität super und Methodenüberdeckung (=welche Methode wird wann benützt bei Untertyp/Obertyp) 10. Mai 2005 philipp_effenberger@web.de