Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage |
<< | < | > | >> | API | Kapitel 9 - OOP III: Interfaces |
Es ist durchaus möglich (und gebräuchlich), daß eine Klasse mehrere Interfaces implementiert. Sie muß 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:
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, daß 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 muß 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, 3. Auflage, Addison Wesley, Version 3.0.1 |
<< | < | > | >> | API | © 1998-2003 Guido Krüger, http://www.javabuch.de |