Was ist der genau Sinn eines Interface?

Status
Nicht offen für weitere Antworten.
A

AnfängerXy

Gast
So hallo liebe Leute!!!

Hab mal ne Frage!

Was ist eigentlich der genaue Sinn eines Interface?? Mir ist das noch nicht so ganz klar???

Freu mich über jede Antwort!!!
Danke schon mal

Lg

Heinz
 

Wildcard

Top Contributor
Code:
List list = new ArrayList();
list = new LinkedList();
Zwei völlig verschiedene Klassen können (weil sie eine gemeinsame Schnittstelle haben) über den gleichen Typ angesprochen werden.
 
G

Guest

Gast
also schafft ein Interface Abhilfe bei Namenskonflikten???
 
G

Guest

Gast
ist das beispiel von dir der einzige vorteil????Oder gibt es weitere?
 
G

Guest

Gast
und wie würde die schnittstelle dann im obigen bsp heißen?
 

Wildcard

Top Contributor
Ich glaube dir ist die Mächtigkeit dieses Konstrukts nicht ganz klar :D
Nimm zum Beispiel das Comparable Interface.
Nur durch ein Interface wird es hier möglich das Java Sortieralgorithmen für völlig beliebige Objekte anbieten kann.
Nächstes Beispiel:
Alle Listener in Java sind Interfaces. Damit wird ermöglicht das jede Klasse auf beliebige Events hören kann.

Es geht dabei um Typisierung. Interfaces sind ein mächtigeres Konzept als Vererbung, allerdings braucht es eine Weile zu verstehen warum.
Als Java Entwickler durchläuft man (vereinfacht) 5 Evolutionsstufen:
1. Man lernt die Syntax
2. Man versteht das Klassenkonzept
3. Man beginnt einen Vorteil in OOP zu sehen
4. Man kann Interfaces verwenden
5. Man versteht Interfaces

Erst ab 5. ist man wirklich in der Lage Design Patterns umzusetzen und sich sinnvoll mit Softwarearchitektur auseinander zu setzen.
Dieser Prozess dauert eine Weile und geschiet IMO automatisch wenn man sich mit dem Thema beschäftigt.
 
G

Guest

Gast
Wildcard, kannst du uns helfe, die Interfaces besser zu verstehen mit einem Bsp vielleicht?

lg
 
G

Guest

Gast
Hallo Heinz Ich versuch dir ein konkretes Beispiel zu geben.
Sagen wir du implementierst eine Anwendung für ein Shop und hast folgende Posten zum Verkauf Fahrrad, Flugzeug und Auto.

Du hast sagen dann Klassen Auto Fahrrad und Flugzeug mit jeweils verschiedenen spezifischen Methoden (hier im Beispiel nur eine)

Code:
public class Auto {
	public int getHubraum() {
		return 2000;
	}
}

public class Flugzeug {
	public int getFlughoehe() {
		return 11000;
	}
}

public class Fahrrad {
	public String getName() {
		return "meinRad";
	}
}

Jetzt hast du eine Methode die dir alle Artikel in einem Vector liefert Shop.getArtikel();

Für dich wichtig ist hier aber nur die Artikelnummer und der Preis. Ob es sich um ein Auto, Flugzeug oder Fahrrad handelt ist nicht uninteressant.

Du definierst ein Interface ShopArtikel()

Code:
public interface ShopArtikel {
	public String getArtikelnummer();
	public int getPreis();
}

Jetzt lässt du deine Klassen das Interface implementieren und implementiertst die vom Interface geforderten Methoden getArtikelnummer(); getPreis(); für jede Klasse und hast somit die Schnittstelle definiert.

Jetzt kannst du alle Autos Flugzeuge Fahrräder nach ShopArtikel Casten oder in ein Vector <ShopArtike> stecken und die Methoden getPreis und getArtikelnummer(); verwenden.

Code:
	ShopArtikel auto = new Auto();
	ShopArtikel rad = new Fahrrad();
	ShopArtikel flugzeug = new Flugzeug();
	int preis = auto.getPreis();
	preis = rad.getPreis();
	preis = flugzeug.getPreis();

Ich hoffe das ist einfach erklärt.
 
G

Guest

Gast
Der wichtigste Vorteil von Interfaces ist dass man seine Implementierung an einer stelle austauschen kann, ohne überall in der Anwendung Änderungen durchführen zu müssen.
Stell dir vor du hast ein riesiges Programm für einen Kunden gebaut. Mit einer Milliarde Code Zeilen. Stell dir außerdem vor du hast eine Komponente, nennen wir sie XYZ, die eine komplizierte Berechnung macht, und sehr langsam ist.
So weit so gut. Nach einem Jahr fällt dir ein du könntest die Berechnung viel performanter implementieren. Du schreibst also deine neue (schnellere) Klasse und implementierst das interface IXYZ. Natürlich bleiben die Methoden die gleichen, nur die Implementierung ist halt anders. Anstatt jetzt überall in deiner Anwendung die alte gegen die neue Klasse auszutauschen (bei einer Milliarde Code Zeilen ein heikles Thema), tauscht du an einer stelle deine implementierung aus mit: IXYZ xyz = new SchnellesXYZ() und wuala!!! Programm läuft schneller.
 
S

SlaterB

Gast
?

selbst wenn man das ganze austauschen müsste, dann ist das doch eine sehr saubere Sache,
alte Klasse entfernen und die Fehlermeldungen anschauen,
einfach 1:1 Klassennamen ersetzen,

noch besser: alten Klassenname weiterbenutzen, dann ist gar nix zu ändern,

dumm wirds nur im Spezialfall, dass die alte Klasse in einem bestimmten Programmteil weiterbenutzt werden muss,
und damit kommt man auch zum echten 'wichtigsten' ( ;) ) Vorteil von Interfaces:

verschiedene Objekte können gleich verwendet werden,
das ist in jeder Hinsicht unschlagbar das wichtigste Merkmal objektorientierter Programmierung
 

Quaxli

Top Contributor
verschiedene Objekte können gleich verwendet werden,
das ist in jeder Hinsicht unschlagbar das wichtigste Merkmal objektorientierter Programmierung

Das ist denke ich einer der wichtigsten Punkte, den SlaterB da genannt hat. Ich nutze diese mächtige Funktionalität gerne in meinen Java-Spielchen. Ich habe eine Basisklasse Sprite, die zwei selbst definieren Interfaces Drawable (Zeichenfunktionalität) und Movable (Bewegung und Logik) enthält. Alle erzeugten Sprites schmeisse ich in einen Vector und wenn die Objekte im Verlauf der Spiel-Routine abgearbeitet werden, werden Sie nach Bedarf zu Drawable oder Movable gecastet, selbst wenn das betreffende Objekt ein Kindobjekt der Basisklasse Sprite ist. Bequemer geht's eigentlich nicht ;)

Was zum Thema Interfaces vielleicht noch zu erwähnen wäre: Wenn man zu mehreren an einem Projekt arbeitet, ist es möglich, die gesamte Programmstruktur über Interfaces abzubilden. Jeder Entwickler kann dann seinen Part separat entwickeln und sich für die benötigten Schnittstellen zur Not kleine Hilfsklassen bauen, die das entsprechende Interface implementieren und einen "Spielwert" zurückliefern. So kann ein Teil des Projektes mit dem richtigen Methodenaufruf getestet werden, ohne daß man darauf warten muß, daß der Kollege das entsprechende Teil fertig hat.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Was ist der genau Sinn von tString()? Allgemeine Java-Themen 3
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
W Was genau sind IOTools? Kann ich stattdessen nicht die Scanner Klasse verwenden? Allgemeine Java-Themen 3
M Klasse in separaten Thread ausführen.Wie genau? Allgemeine Java-Themen 2
Q javax.crypto.BadPaddingException - was ist das genau? Allgemeine Java-Themen 9
L Wie genau soll ein Klassendiagramm sein Allgemeine Java-Themen 4
C Rechnung genau 8 mal ausführen Allgemeine Java-Themen 5
R Collections CopyOnWriteArrayList - wie genau verwenden Allgemeine Java-Themen 7
B notify() - was passiert danach genau? Allgemeine Java-Themen 8
S Was genau heisst ServletContext? Allgemeine Java-Themen 3
H Layout auslagern, aber wie genau??? Allgemeine Java-Themen 11
B Verlinken, was genau? Allgemeine Java-Themen 5
W "int" einlesen - wie genau funktioniert das ? Allgemeine Java-Themen 2
G Public oder Private oder Protected Sinn Allgemeine Java-Themen 14
A Best Practice Wie viele Referenzen machen Sinn? Weniger ist mehr? Allgemeine Java-Themen 1
T Sinn einer toString Methode Allgemeine Java-Themen 3
M Sinn von Kompilierung zur Laufzeit Allgemeine Java-Themen 3
M Sinn von Threads? Allgemeine Java-Themen 1
Thallius Macht das Sinn? Allgemeine Java-Themen 30
A Methoden Der Sinn von system.out.print(); Allgemeine Java-Themen 9
E Serialisierung - Sinn einer generierten serialVersionUID? Allgemeine Java-Themen 4
M Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn? Allgemeine Java-Themen 2
E einfaches Beispiel zu MVC und Sinn V --> M ? Allgemeine Java-Themen 22
F Sinn des Serializable Interfaces Allgemeine Java-Themen 8
S Konstrukt Sinn, Zewck und Name Allgemeine Java-Themen 6
N Für welche Art von Berechnungen macht JCUDA Sinn? Allgemeine Java-Themen 12
M Sinn von XML in Java Allgemeine Java-Themen 10
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
M Array Rang eines Elements Allgemeine Java-Themen 4
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
H Textposition eines gedrehten Textes verschieben Allgemeine Java-Themen 8
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
S Ausfuehrung eines Programms aufzeichnen..? Allgemeine Java-Themen 4
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Vorbereitung eines Praktikums Allgemeine Java-Themen 4
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
M Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers Allgemeine Java-Themen 1
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
H Rename eines Projekts Allgemeine Java-Themen 1
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
Meeresgott Erste Schritte Sourcetree - Git | Suchen eines Commits Allgemeine Java-Themen 2
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
DaCrazyJavaExpert OOP Ansätze und Tipps zum Porgrammieren eines Taschenrechners Allgemeine Java-Themen 25
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
I Verbindung eines Java-Plugins mit Webserver Allgemeine Java-Themen 3
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
B Spalten eines 2d-Arrays Allgemeine Java-Themen 2
M Rechenprogramm eines wissenschaftlichen Taschenrechners Allgemeine Java-Themen 4
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
E Typüberprüfung eines chars Allgemeine Java-Themen 5
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
H Datentypen Typ eines Arrays überprüfen Allgemeine Java-Themen 9
RalleYTN DPI eines Bildes ändern Allgemeine Java-Themen 4
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
K Bestimmten Bereich eines Strings lesen Allgemeine Java-Themen 6
C -Verschiedene Versionen eines Programms verwalten Allgemeine Java-Themen 7
O Datentypen Erstellung eines Containers, der verschachtelte Map-Strukturen beherbergen kann Allgemeine Java-Themen 0
A einmalige Ausführung eines Methodenabschnittes Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
L Menge der Buchstaben eines Textes zählen Allgemeine Java-Themen 3
F Teil eines Bildes laden Allgemeine Java-Themen 1
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
RalleYTN Input/Output URL eines Zip Entry? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben