Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

Java-Frage: Wozu gibt es Interfaces?





Frage

Hallo und Guten Abend, ich habe da mal o.g. Frage: Es gibt in Java "Klassen" und, nennen wir es mal "parallel", "Interfaces". Wozu dient letzteres? Ist die Aufgabe der Interfaces nicht gleich der Klassen? Wohl eher nicht... vermute ich jetzt mal, ohne zu wissen wofür dann. Kann mir da jemand die genauen Unterschiede bzw. Anwendung-, Notwendigkeitsgebiete nennen? Vielen Dank für Eure Hilfe, Gruß Olli

Antwort 1 von Armin

hallo,

nach meinem verständnis:

- interfaces stellen in der tat klassen dar, aber abstrakte, dh ohne implementierung.
- die syntax der deklaration ist anders.
- interfaces dienen imho dazu, standardschnittstellen zu beschreiben, die dann zwar unterschiedlich, aber möglichst vollständig (dem standard konform) implementiert werden von klassen.
- zum anderen wird spez für java hier eine möglichkeit geschaffen, funktionalität der mehrfache vererbung bereitzustellen.

gruesse armin

ps tolles design der webseite

Antwort 2 von TheRealWhistler

Hi,

jup, genau wie Armin es beschrieben hat, gibt es in Java keine Möglichkeit der Mehrfachvererbung bei Klassen-Hierarchien.

Ein Interface beschreibt nur eine Schnittstelle an Methoden, welche die Klasse, welche dieses Interface erbt, implementieren MUSS!!!.

Man kann zwar in Java, eine konkrete Instanz einer Klasse, welche ein Interface implementiert, als ein Objekt betrachten, welches von dem Interface alle Methoden geerbt hat. (So als wäre das Interface eine weitere Klasse welche über Mehrfachvererbung, beim Ableiten, alle abstrakten Methoden des Interfaces vererbt.)
Jedoch ist es keine echte Mehrfachvererbung.
Man könnte Interfaces in Java mit vollständig abstrakten Klassen ohne Attribute in C++ vergleichen. Sie sind sozusagen nur eine Notlösung, der Entwickler von Java.

Warum man Mehrfachvererbung nicht eingebaut hat ist mir Schleierhaft. (Möglicherweise nur, weil Mehrfachvererbung von ein und der selben Basis-Klasse, welche intern aber über 2 verschiedene Instanzen dargestellt werden kann (also nicht virtuell vererbt wird), eine potentielle Fehlerquelle beim Zugriff auf deren Attribute und Methoden darstellt.)

Mehrfachvererbung bietet jedoch viele nette Möglichkeiten beim Desing einer Klassen-Hierarchie.

Ciao

Andreas

Antwort 3 von TheRealWhistler

PS:

ein neues Forum wurde eröffnet für alle die, die Fragen oder Antworten zur Programmierung in allen möglichen Sprachen haben.
Man muss sich nicht unbedingt anmelden, wenn man Posten möchte. (Gast-Posts sind zugelassen)

www.codinghelp.de

Ciao

Andreas

Antwort 4 von onki

Hallo,

das Interfaces zur Mehrfachvererbung dienen ist falsch. Auch wenn das in einigen Büchern so beschrieben ist. Java unterstützt KEINE Mehrfachvererbung!!! Auch sind dies keine abstrakten Klassen. Diese werden in Java durch das Schlüsselwort "abstract" gekennzeichnet. Interfaces zwingen den Programmierer die im Interface angegebenen Methoden zu implementieren. Diese hat den Vorteil, das auf alle Objekte, die ein bestimmtes Interface implementieren, mit den Methoden des Interfaces zugegriffen werden kann. Diese ist auch der Grund warum in einem Interface nur öffentliche "private" Methoden definiert werden können.
Z.B.:
public interface GeomObject {
public int getFlaeche();
}

public class Dreieck implements GeomObject {
public int getFlaeche() {
... Implementierung der Methode...
}
}

public class Quadrat implements GeomObject [
public int getFlaeche() {
... Implementierung der Methode...
}
}

nun ist es z.B. möglich Objektreferenzen anzulegen

GeomObject dreieck = new Dreiech();
GeomObject quadrat = new Quadrat();
dreieck.getFlaeche();
quadrat.getFlaeche();

Hat man jetzt eine Sammlung von geometrischen Objekten in einem Vector und will auf diese zugreifen so "castet" man die Objekte, die man aus dem Vector herraus nimmt.
(GeomObject)myVector.elementAt(i);
Alle Objekt, die aus einem Vector entnommen werden sind vom Typ Object. (siehe API)
Das Vector nicht mehr verwendet werden soll ist mir bekannt. Schaut euch generic unter Java 1.5 an. Da werdet ihr sehen wie wichtig Interfaces sind.

Ein in der GUI-Programmierung häufig benutztes Entwurfsmuster (Design Pattern) ist das MVC (Model-View-Controler). Hierbei ist der Contoler der, der Daten an ein Model liefert. z.B. Sensor. Das Model informiert die angeschlossenen View. (Datensicht, eigentliche Oberflächen). Hierbei wird für jedes der einzelnen Teile MVC ein Interface definiert. Wenn nun ein weiterer View programmiert werden muss so muß man lediglich die Methoden des ViewInterfaces implementieren, da kein Zugriff direkt auf die Objekte sondern auf die Interfaces geschieht.
Es ist nicht so leicht dieses Entwurfsmuster in ein paar Worten zu erklären. Schaut euch Beispiele im Internet. Google wird euch schon einige bieten.

Interfaces sind ein fundamentales und mächtiges Sprachelement von Java. Es handelt sich hier keinesfalls um eine NOTLÖSUNG wie oben beschrieben. C++ Programmierer neigen dazu ihre Sprache mit Java zu vergleichen. Das war bei mir nicht anders. Allerdings mußte ich feststellen, das Java einen sehr durchdachte Sprache ist. (im Gegensatz zu C++, ich möchte hier aber keine Java vs C++ Diskussion anfangen) .

Mehrfachvererbung ist mit Absicht nicht in Java integriert. Die Probleme, die damit verbunden sind stehen in keinem Verhältnis zum Nutzen. Auch in C++ versuchte man Mehrfachvererbung so selten wir möglich zu benutzen.
Desweiteren ist eine sinnvolle Nutzung von Mehrfachvererbung sehr selten.

Antwort 5 von disco

moin

@onki:

Zitat:
Das Vector nicht mehr verwendet werden soll ist mir bekannt.


warum soll Vector nicht mehr benutzt werden?

g,
disco

Antwort 6 von TheRealWhistler

Hallo,

@onki

Du erwähnst Entwurfsmuster, dabei fällt mir das Stichwort "Typ" einer Klasse ein. In der Welt der Entwurfsmuster setzt man den Typ einer Klasse mit seiner/-en Schnittstelle(n) gleich, also sprich engl. Interfaces. Eine Klasse kann auf verschiedenen Wegen seine Schnittstelle definieren, ob nun mit Hilfe eines Interfaces in Java oder einer normalen (Mehrfach-)Vererbung, ist vollkommen egal. (Jedoch bin ich dennoch der Meinung, dass man Interfaces in Java mit vollständig abstrakten Klassen ohne Attribute in C++ vergleichen kann, sie sind im Prinzip nichts anderes.)

Ja Mehrfachvererbung bringt ein paar Tücken mit sich, genauso wie Zeiger in C/C++, da man seine Projekte jedoch genaustens analysiert bevor man sie entwirft und danach implementiert, fallen solche "Schusselfehler" von vorn herein aus.

Grüße,

Andreas

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: