From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001
From: Sven Eisenhauer
+Es ist durchaus möglich (und gebräuchlich), dass eine Klasse
+mehrere Interfaces implementiert. Sie muss dann zu jedem Interface
+alle darin definierten Methoden implementieren. Mit jedem implementierten
+Interface wird sie zu dem dadurch definierten Datentyp kompatibel.
+Eine Klasse, die n Interfaces implementiert, ist demnach zu
+n + 1 Datentypen (plus ihren jeweiligen Oberklassen) kompatibel:
+
+Wir könnten beispielsweise die in Listing 9.2
+definierte Klasse Auto2 erweitern
+und sie die Interfaces Groesse
+und Comparable
+implementieren lassen:
+
+
+
+
+
+
+ Titel
+ Inhalt
+ Suchen
+ Index
+ DOC
+ Handbuch der Java-Programmierung, 5. Auflage
+
+ <<
+ <
+ >
+ >>
+ API
+ Kapitel 9 - OOP III: Interfaces
+
+
+
+
+
+9.3 Mehrfachimplementierung und Vererbung
+
+
+
+
+
+
+
+9.3.1 Mehrfachimplementierung
+
+
+
+
+
+
+
+Listing 9.8: Implementierung mehrerer Interfaces
+
+
+
+
+
+001 /* Auto3.java */
+002
+003 public class Auto3
+004 implements Groesse, Comparable
+005 {
+006 public String name;
+007 public int erstzulassung;
+008 public int leistung;
+009 public int laenge;
+010 public int hoehe;
+011 public int breite;
+012
+013 public int laenge()
+014 {
+015 return this.laenge;
+016 }
+017
+018 public int hoehe()
+019 {
+020 return this.hoehe;
+021 }
+022
+023 public int breite()
+024 {
+025 return this.breite;
+026 }
+027
+028 public int compareTo(Object o)
+029 {
+030 int ret = 0;
+031 if (leistung < ((Auto3)o).leistung) {
+032 ret = -1;
+033 } else if (leistung > ((Auto3)o).leistung) {
+034 ret = 1;
+035 }
+036 return ret;
+037 }
+038 }
+
+
+Auto3.java
+
+Nun sind Objekte dieses Typs sowohl zu Groesse +als auch zu Comparable kompatibel +(Hinweis: die Sortierung basiert in diesem Fall nicht auf der Größe +des Autos, sondern auf seiner Leistung). + + + + +
+Die Implementierung hätte noch etwas vereinfacht werden können, +wenn wir uns zu Nutze gemacht hätten, dass eine Klasse die Interfaces +seiner Basisklasse erbt: + + +
+
+
+
+001 /* Auto4.java */
+002
+003 public class Auto4
+004 extends Auto2
+005 implements Comparable
+006 {
+007 public int compareTo(Object o)
+008 {
+009 int ret = 0;
+010 if (leistung < ((Auto4)o).leistung) {
+011 ret = -1;
+012 } else if (leistung > ((Auto4)o).leistung) {
+013 ret = 1;
+014 }
+015 return ret;
+016 }
+017 }
+
+ |
++Auto4.java | +
+Auto4 erbt von Auto2 +nicht nur die Implementierung, sondern auch die Klausel implements +Groesse und erweitert sie um die Implementierung von Comparable. +Damit ist Auto4 gleichwertig +zu Auto3. + + + + +
+Auch Interfaces selbst können abgeleitet werden. Ähnlich +einer Klasse erbt das abgeleitete Interface alle Methodendefinitionen +des Basis-Interfaces. Die implementierende Klasse muss also auch alle +Methoden von allen übergeordneten Interfaces implementieren: + + +
+
+
+
+001 /* Listing0910.java */
+002
+003 interface EinDimensional
+004 {
+005 public int laenge();
+006 }
+007
+008 interface ZweiDimensional
+009 extends EinDimensional
+010 {
+011 public int breite();
+012 }
+013
+014 interface DreiDimensional
+015 extends ZweiDimensional
+016 {
+017 public int hoehe();
+018 }
+019
+020 interface VierDimensional
+021 extends DreiDimensional
+022 {
+023 public int lebensdauer();
+024 }
+025
+026 public class Listing0910
+027 implements VierDimensional
+028 {
+029 public int laenge() { return 0; }
+030 public int breite() { return 0; }
+031 public int hoehe() { return 0; }
+032 public int lebensdauer() { return 0; }
+033 }
+
+ |
++Listing0910.java | +
| Titel + | Inhalt + | Suchen + | Index + | DOC + | Handbuch der Java-Programmierung, 5. Auflage, Addison +Wesley, Version 5.0.1 + |
| << + | < + | > + | >> + | API + | © 1998, 2007 Guido Krüger & Thomas +Stark, http://www.javabuch.de + |