Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Abstrakte Klassen.

Ähnliche Präsentationen


Präsentation zum Thema: "4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Abstrakte Klassen."—  Präsentation transkript:

1 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Abstrakte Klassen

2 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Grundlage: eine Basisklasse kann keine Instanzen erzeugen Ausgangspunkt war Vererbung – Übernahme von Attributen und Methoden in abgeleitete Klassen public class GeoFigur { protected float Länge; protected float Breite; protected float Fläche; static protected int InstCounter; // Konstruktoren // Methoden zum Setzen und Lesen public float setl(float x) {…}

3 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 diese Attribute und Methoden sind allgemeingültig, andere Methoden machen nur für konkrete Instanz Sinn, wie beispielsweise: public abstract float berechneFlaeche(); public abstract float berechneVolumen(); diese Methoden erhalten den Modifier abstract: abstrakte Methoden können nicht vom Typ static, private oder final sein sie enthalten keine Methodendefinition beinhaltet eine Klasse eine abstrakte Methode, dann ist die Klasse selbst abstrakt

4 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Abstrakte Klassen sind durch das Schlüsselwort abstract gekennzeichnet und können nicht als final deklariert werden. Sie können auch nicht instanziert werden. Soll eine abstrakte Klasse verwendet werden (zum Beispiel die Ableitungen Dreieck, Rechteck, Kreis der Klasse GeoFigur) muss die abstrakte Methode implementiert werden. Allen abgeleiteteten Klassen sind aber die abstrakten Methoden gemeinsam (gleiche Parameter und Rückgabewerte).

5 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Interfaces

6 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 In manchen Fällen ist es sinnvoll, eine Klasse mit zwei oder mehr Basisklassen zu erzeugen Mehrfachvererbung Beispiel Leichtathlet Basisklasse: Leichtathlet Abgeleitet: Weitspringer – Hochspringer – 100m Läufer – Hürdenläufer... Neue Klasse: Zehnkämpfer Erbt von bestimmten Klassen, die von Leichtathlet abgeleitet sind Übernimmt Methoden und Attribute von 10 Klassen Problem: sind in den Basisklassen Variablen oder Methoden mit gleichem Namen aber unterschiedlicher Ausprägung vorhanden Zuordnung schwierig Beispiel: Weitspringer und Hochspringer könnten springe() enthalten

7 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Alternativen: es könnte eine Methode fest angesprochen werden aber Vorteile der Mehrfachvererbung gehen verloren bei jedem Aufruf die Methode explizit angeben z.B. Weitspringer.springe() auf dynamische Zuordnung von M. wird verzichtet Mehrfachvererbung wird aber nur in wenigen Fällen wirklich nutzbringend eingesetzt: Zehnkämpfer ist weder Weitspringer noch Hochspringer Interfaces Mit Schnittstellen überwindet Java die Einschränkungen der Einfachvererbung ohne die Nachteile der MFV in Kauf nehmen zu müssen IF definieren beliebige Anz. von Methoden und Variablen und damit gleichzeitig eigenen Referenztyp.

8 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Um eine Schnittstelle S zu implementieren muß eine Klasse C alle in der Schnittstelle enthaltenen Methoden konkret realisieren Verpflichtung Eine Schnittstelle kann andere Schnittstellen erweitern. Allgemeine Form: [public] [abstract] interface InterfaceName [extends BasisInterface] { [public] [static] [final] Konstante1 = Wert1;... [public] [abstract] Methode1(Argumentliste); } Jede Variable im Interface gilt automatisch als static und final es handelt sich um eine Konstante - die zu initialisieren ist !!!!

9 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 public interface Kalorien { public double lesenKalorien(); } Jede Klasse, die eine Methode lesenKalorien() enthält, kann das Interface implementieren: public class SchokoKeks extends Keks implements Kalorien { private double kal; public double lesenKalorien() { return kal; } //.. weitere Methoden von SchokoKeks }

10 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Andere Klassen können Referenzen auf Objekte der Klasse Interface erzeugen und diesen Objekte der Klasse SchokoKeks zuweisen: public class A { Kalorien SKeks = new SchokoKeks(); System.out.println(Skeks.lesenKalorien());... }

11 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Nutzen von Interfaces

12 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Wenn andere Klassen mit anderer Vererbungshierarchie ebenfalls das Interface imlementieren... public class Pausenbrot extends Brot implements Kalorien {... public double lesenKalorien() {... implementieren }

13 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Pausenbrot und Schokokeks stammen von unterschiedlichen Vererbungshierarchien, implementieren aber die gleiche Schnittstelle. Klasse A kann daher über die Schnittstelle Kalorien die Methode lesenKalorien() aller betreffender Klassen aufrufen: public class A { Kalorien SKeks = new SchokoKeks(); Kalorien PBrot = new Pausenbrot(); System.out.println(Skeks.lesenKalorien()); System.out.println(PBrot.lesenKalorien());... }

14 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Packages

15 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Bisher war jede Klasse eine eigene Datei.class Ziel der Packages: Gliederung der Projektklassen und der Systembibliotheken Pakete enthalten inhaltlich zusammengehörende Klassen, Schnittstellen und Unterpakete. Alle Klassen gehören implizit zu einem Package, das unbenannt ist. Paketdeklaration: package ein.paket.name; class KlassenName {...} Der Paketname ist implizit jedem im Paket enthaltenen Typnamen vorangestellt (vor allen Klassen und Schnittstellen- definitionen der Klasse). Der vollständige Name für ein Package besteht aus Komponenten, die durch Punkte getrennt sind.

16 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Packages korrespondieren mit der Verzeichnisstruktur (abhängig von Java-Implementation) Jede Komponente eines P-Namens kann einem bestimmten Verzeichnis des Rechners zugeordnet werden Klassen und Schnittstellen werden als einzelne Dateien im Verzeichnis gespeichert Namenswahl: Grundsätzlich beliebig, systemweite Packages Namenskonvention von Sun gewährleistet weltweit eindeutige Namen für P. Internet Domain Namen + interner PackageName

17 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Beispiele:zugehörige Dateinamen: Package Klasse Methode java.lang.Thread.start()../java/lang/Thread.class Package Klassse Methode com.ms.awt.image.getsize()../com/ms/awt/image.class../lib/classes.zip Package Klasse Methode de.hs-merseburg.in.pax.java.GeoFig.setB()

18 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Zugriff: über den direkten Namen einschließlich vorangestelltem Paketbezeichner Beispiel: Klasse A in Package x.y.z x.y.z.A Eindeutige Referenz möglich: public class B { int f() { x.y.z.A einA; x.y.z.A nochEinA;... einA = new x.y.z.A(); }}

19 4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Problem: unübersichtlicher Quelltext import import x.y.z.A;import x.y.z.B; public class D { int g() { A a = new A(); B b = new B(); x.y.z.C c = new x.y.z.C();// nicht imp. Name... }} Import von Teilen oder des ganzen Paketes import x.y.z.A; import x.y.z:*; Importiert nur die Klassen einer Ebene Unterpakete müssen selbst importiert werden.


Herunterladen ppt "4 Abstrakte Klassen,Interfaces und Packages Java HS Merseburg (FH) WS 06/07 Abstrakte Klassen."

Ähnliche Präsentationen


Google-Anzeigen