Frage zum Interface

Status
Nicht offen für weitere Antworten.

nickname

Bekanntes Mitglied
Hallo,

eine Sache (und vieles mehr) zum Thema Interface verstehe ich im Mom. nicht so ganz.:confused:

Was bringt es mir, ein Objekt einer Klasse dem Typ eines Interface zuzuweisen??

Bsp.:
Code:
....
     public class Auto implementes BeliebigesInterface{
   ....
.....
        BeliebigesInterface xyz = new Auto();
    .... usw.

Ich habe nur gelsen, dass es geht aber warum, ist mir schleierhaft:confused:

Wäre für Erklärungen dankbar!!!

Danke!!
 

Wildcard

Top Contributor
Das ist Java Mehrfachvererbung. Hin zum Interface.
Eine ArrayList zum Beispiel ist auch vom Typ List, und Collection und RandomAccess.
In deinem Fall ist Auto vom Typ Auto, vom Typ Object und vom Typ BeliebigesInterface.
Daher funktioniert all das:
[HIGHLIGHT="Java"]BeliebigesInterface x = new Auto();
Auto y = new Auto();
Object z = new Auto();
[/HIGHLIGHT]
 
Zuletzt bearbeitet von einem Moderator:

0x7F800000

Top Contributor
Solange Autos, Gebäude & Zombies alle das interface "Abknallbar" implementieren, kannst du sie alle gleich behandeln:
[HIGHLIGHT="Java"]
interface Abknallbar{
abknallen();
}

Abknallbar[] verschiedeneSachen={ new Zombie(), new Zombie(), new Auto(), new Gebäude()};
for(Abknallbar x:verschiedeneSachen){
x.abknallen();
}
//zombies zerplatzen
//auto explodiert
//gebäude stürzt ein
[/HIGHLIGHT]
Das tolle ist: du brauchst überhaupt nicht zu wissen, was die einzelnen Klassen konkret machen. Du brauchst nicht mal zu wissen, dass diese Klassen existieren. Wenn in einem Jahr nach der erstellung der Klasse jemand auf die idee kommt, Hubschrauber hinzuzufügen, kann er diese gleich in's spiel reinpacken und abknallen lassen, vorausgesetzt Hubschrauber implementiert auch Abknallbar. Hat ja bei gta ganz gut geklappt^^ :p
 
Zuletzt bearbeitet von einem Moderator:

Ark

Top Contributor
Ein Interface ist (bei Implementierung) eine Garantie dafür, dass bestimmte Methoden (nämlich genau die im Interface deklarierten) tatsächlich vorhanden und aufrufbar sind. java.lang.Comparable ist ein schönes Beispiel hierfür: Zum Sortieren von Elementen müssen diese miteinander vergleichbar sein. Der Sortierer weiß aber nicht, wie man nun konkret zwei Elemente miteinander vergleicht, deswegen ruft er eine Methode des einen Elements auf, übergibt ihr dabei das andere Element und lässt dann beide unter sich ausmachen, welches nun das größere von beiden ist (falls überhaupt, aber das ist Nebensache).

Die spannende Frage lautet aber: Woher sollte der Sortierer wissen, welche Methode er aufrufen muss? Er kann ja unmöglich alle Klassen kennen. Hier kommt das Interface (=Schnittstelle) ins Spiel: Comparable garantiert, dass eine compareTo()-Methode da ist, die der Sortierer aufrufen kann.

Deine Schuko-Steckdosen kennen ja auch nicht jedes Gerät, dass man an sie anschließen könnte. Du weißt aber beim Kauf eines Geräts "Aha, kann über Schuko-Steckdose mit Strom versorgt werden", und das ist wichtig. Gleicher Fall bei z.B. USB-Schnittstellen: Eine Schnittstelle (=Interface ;) ), die garantiert, dass USB-Geräte an sie angeschlossen werden können. Was für ein Gerät es nun genau ist, ist dabei Nebensache.

Ark
 

hdi

Top Contributor
Ich versuch's auch mal mit einer Erklärung:
Wenn du ein Objekt mit Typ eines Interfaces deklarierst:

[HIGHLIGHT="Java"]
interface Drivable{
public void drive();
}

class Auto implements Drivable{...}

// nicht:
Auto a = new Auto();
// sondern:
Drivable a = new Auto();[/HIGHLIGHT]

dann kannst du auf diesem Objekt die Methode drive() aufrufen.
Das kannst du jetzt aber auch mit Motorrädern, LKWs, Flugzeugen, und allem anderen
das dieses Interface implementiert.

Das ist aber gar nicht der Vorteil, denn du könntest jeder dieser Klassen die Methode
drive() auch geben ohne Interface.
Der Vorteil ist, dass du diese Objekte abstrahierst: Du wirst nur drive() aufrufen können, und nicht zB getPS() vom Auto oder getKerosin() vom Flugzeug.

An einer Stelle, wo du etwas also nur Fahren willst, und der Rest ist dir egal, nimmst
du Objekte vom Interface-Typ, nicht vom "echten" (Achtung umgangssprachl.) Typ.

Damit ist sichergestellt, dass du keinen Schmarrn machen kannst.

EDIT:

Ein Interface ist eine Schablone. Wenn Auto zwei Interfaces implementiert, das eine
ist Drivable das andere ist zB Verschrottable, dann wird der Schrottplatz alle Autos
als Schrottable-Objekte entgegennehmen, der Chaffeur als Drivable.

Du kannst halt eine Klasse in einem Programmteil, wo du etwas mit Objekten dieser
Klasse tun willst, auf die Funktionalität die du gerade brauchst zusammendrücken.

Wie gesagt: Eine Schablone, die sich über die Klasse legt, und nur ein Loch dort hat,
wo die Interface-Methode steht. Der Rest ist unbekannt.

Vllt noch ein wenig praktisch untermalt, damit der Sinn wirklich klar wird:

Willst du auf einmal dass nur noch Autos Schrottable sind,
und keine Flugzeuge, LKWs, Motorräder, Kühlschränke oder sonst was, dann nimmst
du bei diesen Klassen einfach das Interface raus.
An der Schrottplatz-Klasse muss du gar nix mehr ändern.
Hingegen wenn du es ohne Interface gemacht hättest müsstest du am Schrottplatz
Anpassungen vornehmen, zB die Methoden "überreicheFlugzeug(Flugzeug f)", "überreicheLKW(LKW w)", "überreicheMotorrad(Motarrad m)" usw entfernen.

Mit Interface haste nur "überreicheSchrottable(Schrottable s)", und jetz ist es
dir völlig Wurscht was genau das ist.

Der Code wird also flexibler, du kannst schneller Dinge ändern, erweitern, löschen.
 
Zuletzt bearbeitet:

nickname

Bekanntes Mitglied
Danke an alle!!

Klar, hdi, in einem Interface kann ich ja eine Methode definieren, die von verschieden Klassen genutzt werden kann, das ist mir klar.

Aber eins verstehe ich noch nicht so ganz:
Der Vorteil ist, dass du diese Objekte abstrahierst: Du wirst nur drive() aufrufen können, und nicht zB getPS() vom Auto oder getKerosin() vom Flugzeug.

Meinst du, wenn diese Methoden (z.B. getPS()) auch im Interface stehen? :confused:

Danke.
 

hdi

Top Contributor
Ich hab meinen Post editiert, lies dir den 2.Teil durch dann verstehst du das vllt besser.
Die Methoden getPS() usw. wären natürlich NICHT im Interface, sondern in den jeweiligen
Klassen.
Da die aber nicht interessieren, sollten die auch nicht sichtbar sein.
 

Wildcard

Top Contributor
Da die aber nicht interessieren, sollten die auch nicht sichtbar sein.
Das ist weniger der Sinn der Interfaces. Bei Interfaces geht es darum, sich auf Schnittstellen zu einigen und nicht auf Typen. Sind an der Modulgrenze nämlich nur Schnittstellen bekannt, kann die gesamte Implementierung ausgetauscht werden, ohne das Konsumenten des Moduls davon betroffen sind.
Aber derartigen Konzepten kann man als Anfänger wohl noch recht wenig anfangen.
 

hdi

Top Contributor
Naja ich sehe es so, dass Interfaces zwei Vorteile bieten, die voneinander recht
unabhängig sind, und nix miteinander zu tun haben.

1) Design-Planung, oder Wiederverwendbarkeit -> Frameworks
2) in einer ganz konkreten Implementierung

Du hast grad von ersterem geredet, das ist natürlich korrekt.
In meinem Bsp red ich von zweiterem, und das ist finde ich auch korrekt.

Wie gesagt, ich sehe das ziemlich klar getrennt voneinander. In grossen Projekten
wird pauschal für jede Klasse ein Interface geschrieben, und es werden nur Interfaces
in der Implementierung genutzt. (Mit Implementierung mein ich jetz das Modul, das diese Dinge nutzt)

Aber wenn man konkret etwas schreiben will, nutzt man Interfaces auch, nur halt
nicht dafür. Ein Auto kann ruhig ein Auto sein und kein "IAuto" oder sonstwas.
Also Interfaces als Richtlinie dafür, was man mit einem Objekt tun kann und was nicht, einfach um schneller Änderungen
vornehmen zu können und ein Objekt an einer Stelle zu abstrahieren.
 
Zuletzt bearbeitet:

Wildcard

Top Contributor
Also Interfaces als Richtlinie dafür, was man mit einem Objekt tun kann und was nicht, einfach um schneller Änderungen
vornehmen zu können und ein Objekt an einer Stelle zu abstrahieren.
Das deckt sich ja auch hundertprozentig mit dem was ich geschrieben habe. In einem anderen Posting hörte sich das mehr nach fehlgeleiteter Sichtbarkeitssteuerung an.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Frage zu Interface Java Basics - Anfänger-Themen 16
J Frage zu dem Thema interface Java Basics - Anfänger-Themen 5
O Frage zu Interface Java Basics - Anfänger-Themen 5
F Interface Interface Frage Java Basics - Anfänger-Themen 3
M Frage zum Interface Comparable Java Basics - Anfänger-Themen 3
Luk10 Frage zu Interface Java Basics - Anfänger-Themen 6
P Eine Frage begzl. Interface / Polymorphie Java Basics - Anfänger-Themen 11
D Interface-Frage Java Basics - Anfänger-Themen 6
I Generelle Frage zu Interface Java Basics - Anfänger-Themen 3
M Frage zu Interface CodeBeispiel Java Basics - Anfänger-Themen 4
R Frage zum Cloneable-Interface Java Basics - Anfänger-Themen 9
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2
H Frage an die Profis Java Basics - Anfänger-Themen 4
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
JavaSchmecktLecker Polymorphie Frage zur Methodenüberschreibung Java Basics - Anfänger-Themen 21
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
DoubleM Runtime.getRuntime().exec Frage Java Basics - Anfänger-Themen 2
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
O Frage: Formaler Typbezeichner? Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
L Frage zum Array Java Basics - Anfänger-Themen 1
A Frage zum UML Design Java Basics - Anfänger-Themen 1
I Hilfe bei Klausur Frage Java Basics - Anfänger-Themen 8
izoards Drucken Frage zu FAQ Beitrag Java Basics - Anfänger-Themen 2
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
A OCA Study Guide: 2. Frage aus Kapitel 3 Java Basics - Anfänger-Themen 9
sserio Date Library Frage Java Basics - Anfänger-Themen 9
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
sserio Frage zu HashMaps Java Basics - Anfänger-Themen 20
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
D Frage bzgl. Enum-Handhabung Java Basics - Anfänger-Themen 16
xxx12 Frage Java Basics - Anfänger-Themen 2
I Generelle Frage zu Mikroservices (Spring Boot?), Docker... Java Basics - Anfänger-Themen 7
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
A Frage zur programmierung Java Basics - Anfänger-Themen 12
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
R Input/Output Frage zu Java IO Java Basics - Anfänger-Themen 6
M Frage zu printWriter Java Basics - Anfänger-Themen 5
C Frage zu OLSMultipleLinearRegression Java Basics - Anfänger-Themen 31
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
L Frage zur Ticket Maschine Java Basics - Anfänger-Themen 1
J Frage zu OOP-Klassendiagramm Java Basics - Anfänger-Themen 8
OSchriever Frage zu Compiler Java Basics - Anfänger-Themen 8
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
F Frage betreff Programmierbücher zu Lagerverwaltung als Konsolenprogramm Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
I String.split regex Frage Java Basics - Anfänger-Themen 2
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
J Frage zum Loggen Java Basics - Anfänger-Themen 18
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Zrebna Frage zum "Referenzen-konzept" in Java Java Basics - Anfänger-Themen 8
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
B Erste Schritte Learning Coding (!) Frage an erfahrene Programmierer. Java Basics - Anfänger-Themen 23
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
C Exception-Frage Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
S Frage des Designs Java Basics - Anfänger-Themen 1
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
pkm Frage zu Servletfunktion Java Basics - Anfänger-Themen 0
B Frage zur Währungsumrechnung Java Basics - Anfänger-Themen 3
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
D Frage zur IDE IntelliJ IDEA Java Basics - Anfänger-Themen 6
H Frage zum 2d Array Java Basics - Anfänger-Themen 1
N Frage zum Newton-Fraktal Java Basics - Anfänger-Themen 1
H Frage zu interfaces Java Basics - Anfänger-Themen 1
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
I Frage zu SkipList Java Basics - Anfänger-Themen 4
G Frage zu JScrollPane Java Basics - Anfänger-Themen 12
Kirby.exe Allgemeine Frage Java Basics - Anfänger-Themen 3
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
J Kleine Frage zu OOP Java Basics - Anfänger-Themen 371
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
F Frage zu Iteratoren Java Basics - Anfänger-Themen 2
C Erste Schritte Frage zur ArrayList Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Neue Themen


Oben