| Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 7. Auflage |
| << | < | > | >> | API | Kapitel 10 - OOP III: Interfaces |
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 10.2 definierte Klasse Auto2 erweitern und sie die Interfaces Groesse und Comparable implementieren lassen:
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 ihrer 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-Interface. Die implementierende Klasse muss also auch alle Methoden von allen übergeordneten Interfaces implementieren:
001 /* Listing1010.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 Listing1010
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 }
|
Listing1010.java |
| Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 7. Auflage, Addison Wesley, Version 7.0 |
| << | < | > | >> | API | © 1998, 2011 Guido Krüger & Heiko Hansen, http://www.javabuch.de |