Schnittstellen(interface)

Status
Nicht offen für weitere Antworten.

carpe

Aktives Mitglied
Hallo Leute,

warum kann man einem Objekt ein Interface Datentyp zuweisen z.B so
Vergroesserbar obj = new MeineKlasse();

Man kann doch kein Objekt von einem Interface erzeugen oder (neben bei)von einer abstrakten Klasse.
Das verstehe Ich alles nicht.

mfg

carpe
 

hdi

Top Contributor
Man kann doch kein Objekt von einem Interface erzeugen oder (neben bei)von einer abstrakten Klasse.

Das stimmt beides nicht. Ein Objekt "von einem Interface" erstellst du genau dann, wenn du ein neues Objekt einer Klasse erstellst, die dieses Interface implementiert. Dann ist das Objekt vom Typ her der Typ der speziellen Klasse, aber halt auch vom Typ des Interfaces, weil die Klasse es implementiert.

Bei abstrakten Klassen ist es das gleiche: Du kannst zwar kein Objekt von einer abstrakten Klasse direkt erzeugen, aber eins von jeder beliebigen Unterklasse, die von dieser abstrakten Klasse erbt. Auch hier ist der Typ dieses Objekts dann auch der Typ der abstrakten Klasse.

Merk dir einfach:

Überall dort, wo ein Objekt vom Typ X erwartet wird, kannst du in Java auch jedes Objekt Y angeben, wenn:
- Y von X erbt (egal ob X abstrakt ist oder nicht)
- für denn Fall dass X keine Klasse ist sondern ein Interface: Y das Interface X implementiert
 

carpe

Aktives Mitglied
Wo ist da der vorteil von Vergrösserbar obj = new MeineKlasse();
kann Ich damit auf die Elemente der Klasse zurgreifen?

mfg
 

Leroy42

Top Contributor
carpe hat gesagt.:
warum kann man einem Objekt ein Interface Datentyp zuweisen z.B so

Nein, genau umgekehrt!

In dieser Zeile wird einem Interface-Datentyp ein Objekt zugewiesen (das dieses Interface vermutlich implementiert) :D
 
S

SlaterB

Gast
carpe hat gesagt.:
Wo ist da der vorteil von Vergrösserbar obj = new MeineKlasse();
die Zeile direkt bietet eher wenig Vorteile, interessanter wirds bei Methoden-Parametern

Collections.sort(List)
ist es egal, ob da eine ArrayList oder LinkedList kommt, beide werden sortiert weil das Interface alle nötigen Methoden vorgibt
 

hdi

Top Contributor
Wo ist da der vorteil von Vergrösserbar obj = new MeineKlasse();
kann Ich damit auf die Elemente der Klasse zurgreifen?

Nein du kannst nur auf die Methoden vom Interface zugreifen, nicht auf die von MeineKlasse
(ausser durch explizites casten, aber das ist ne andere Geschichte)

Der Vorteil ist, dass du abstrahieren kannst.

Bsp eine Klasse, die eine Liste von irgendwas enthält, und damit etwas machen kann.
zB eine Bestellung im McDonald's aufnehmen.

Wenn nun die einzelnen Klassen BigMac, Cheeseburger, McSundae, McSalad, ... alle ein
Interface "Angebot" implementieren, welches eine Methode abrechnen() anbietet, könnte die oben
erwähnte Klasse folgendes tun:

Code:
List<Angebot> items; // <- da kann man BigMacs reintun, oder Cheeseburger, oder Salate, usw..
int zuZahlen = 0;
for ( Angebot a : items ){
         zuZahlen += a.abrechnen();
}

Weil jeder einzelne Burger o.ä. dieses Interface implementiert und die abrechnen Methode überschreibt,
sodass sie die Kosten von diesem Burger zurückgibt.
Versuch das mal zu machen, ohne ein Interface. Da müsstest du in jeder Schleife erstmal
überprüfen, ob das nun ein Cheeseburger oder ein BidMac ist, und per if-else Schachtelungen
den Betrag erhöhen.

Und das musst du hier nicht, weil du es abstrahierst: Alles was die Klasse interessiert, ist dass
sie eine Liste von Dingen hat, die man gekauft hat und deren Kosten zusammenrechnetn. Es ist
ihr total egal was du jetz genau kaufst, sie will nur das Geld sehen ;)

Ist dir jetz der Sinn von Interfaces klar?

ps: Jegliche Namens-Übereinstimmung einer bekannten Fastfood-Kette ist unbeabsichtigt, außerdem würd ich nie dafür Werbung machen weil McDonalds suckt und die Pommes beim Burger King viel knuspriger sind.
 

carpe

Aktives Mitglied
Leute,

Danke für eure Mühe , ich glaub jetzt habe ich den dreh.
Ich werde jetzt mal weiter üben.

Mgf
 
G

Guest

Gast
hdi hat gesagt.:
Merk dir einfach:

Überall dort, wo ein Objekt vom Typ X erwartet wird, kannst du in Java auch jedes Objekt Y angeben, wenn:
- Y von X erbt (egal ob X abstrakt ist oder nicht)
- für denn Fall dass X keine Klasse ist sondern ein Interface: Y das Interface X implementiert
? Entweder verdreh ich es grad wieder oder du. :bae:
Y von X erbt:
Code:
class X
 {}
class Y extends
{}
Code:
X x = new Y(); // korrekt Y erwartet aber X angegeben
Y y = new X(); // X erwartet aber Y angegebn
Also sollte es doch heissen:

Überall dort, wo ein Objekt vom Typ X erwartet wird, kannst du in Java auch jedes Objekt Y angeben, wenn:
- X von Y erbt (egal ob Y abstrakt ist oder nicht)
- für denn Fall dass Y keine Klasse ist sondern ein Interface: X das Interface Y implementiert

keine garantie, aber so dachte ich bisher.[/code]
 

hdi

Top Contributor
@Gast

Du verdrehst das gerade ;)

...wenn Y von X erbt = Y extends X

Stimmt doch...:

class X{}
class Y extends X{}

X x1 = new X();
X x2 = new Y(); // <-- korrekt.
Y y = new X(); // <-- NICHT korrekt, weil X keine Unterklasse von Y ist
 
G

Guest

Gast
OK verstehe nun wie du das meinst, ich hab einfach gemeint der rechte operand erwartet was vom linken...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Fischkralle Beim Clean Coden an den Schnittstellen geschnitten. Allgemeine Java-Themen 10
R Virtuelle Serielle Schnittstellen mit RXTX Allgemeine Java-Themen 2
S Kommunikation von Core und GUI über Schnittstellen Allgemeine Java-Themen 2
Shoox Hibernate / JAXB für Schnittstellen Allgemeine Java-Themen 4
Sonecc Ansprechen von Schnittstellen des PCs Allgemeine Java-Themen 4
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
OnDemand Interface imlementieren Allgemeine Java-Themen 4
Buroto Interface Allgemeine Java-Themen 2
T Komische Zeichen im Zusammenhang mit Serializable interface Allgemeine Java-Themen 13
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
B JaxB und @XmlIDREF mit Interface Allgemeine Java-Themen 1
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
Kirby.exe Autocloseable Interface Allgemeine Java-Themen 2
T Abgeleitetes Interface public ohne Schlüsselwort "interface"? Allgemeine Java-Themen 3
S static in Interface und Klasse Allgemeine Java-Themen 2
S static methode im Interface Allgemeine Java-Themen 1
S Interface, generischer Datentyp, Exception? Allgemeine Java-Themen 3
B Vererbung Interface und implementierende Klassen Allgemeine Java-Themen 8
A Anonyme Klassen - Interface Allgemeine Java-Themen 5
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
mrBrown Namensfindung Fluent-Interface Allgemeine Java-Themen 0
J Logik in Interface Allgemeine Java-Themen 2
N Best Practice Allgemeines Verhalten für ein Interface implementieren? Allgemeine Java-Themen 7
B eigenes Consumer Interface Allgemeine Java-Themen 0
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
N GUI Interface, swing Allgemeine Java-Themen 7
Thallius Konzeptproblem User-Interface Allgemeine Java-Themen 5
T Interface vs abstract Allgemeine Java-Themen 2
S Klassen Abstract, Interface und ein Chat Tool Allgemeine Java-Themen 1
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
C Klassen Problem mit Funktion einer Generischen Klasse die ein Interface implementiert Allgemeine Java-Themen 0
N Problem mit Generics und Interface Allgemeine Java-Themen 4
D Methode mit optionalen Parametern in Interface Allgemeine Java-Themen 3
T Interface mit generische Typen Allgemeine Java-Themen 5
M Interface einer Library implementieren Allgemeine Java-Themen 3
A Klassen ein Interface aufzwingen Allgemeine Java-Themen 4
Bananabert Interface Custom 'Event' mit Interface Allgemeine Java-Themen 10
J Interface Serializable Methodensignatur Allgemeine Java-Themen 2
J Interface Interface für Framework verwenden Allgemeine Java-Themen 4
F Interface IInterface oder Interface? Allgemeine Java-Themen 3
M Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn? Allgemeine Java-Themen 2
T Interface Probleme Allgemeine Java-Themen 8
M Queues und Queue Interface Allgemeine Java-Themen 3
I Mehrfaches Implementieren eines generischen Interface Allgemeine Java-Themen 9
W Java Native Interface und "mp3player" Allgemeine Java-Themen 3
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
P Eclipse Java Native Interface-Problem Allgemeine Java-Themen 8
Z Abstrakte Klassen /Interface Allgemeine Java-Themen 5
pg1337 Interface-Frage Allgemeine Java-Themen 24
S Interface Welchen Interface Stil favorisiert ihr? (usability) Allgemeine Java-Themen 17
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
T OpenOffice Interface Elemente Ein/Ausblenden Allgemeine Java-Themen 5
K Interface Interface comparable machen Allgemeine Java-Themen 9
T Interface > Abstract > Class Allgemeine Java-Themen 11
N Trick für Compilerfehler bei fehlendem Interface Allgemeine Java-Themen 12
X Interface - Klasse einladen Allgemeine Java-Themen 6
G Interface -> InterfaceImplementierung Allgemeine Java-Themen 3
Ark Array durch Interface ersetzen Allgemeine Java-Themen 7
R Interface instanzieren Allgemeine Java-Themen 8
B Frage zu Interface und List Allgemeine Java-Themen 4
KrokoDiehl JNI: native im Interface Allgemeine Java-Themen 4
S normale vererbung als interface Allgemeine Java-Themen 2
E Beispiel für ein möglichst einfaches Interface Allgemeine Java-Themen 22
N Unterschied abstract interface und interface Allgemeine Java-Themen 4
S interface verbung problem Allgemeine Java-Themen 9
S problem programm mit interface: Allgemeine Java-Themen 3
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
B Interface und von Thread ableiten Allgemeine Java-Themen 6
R Interface Serializable technische Begrenzung Allgemeine Java-Themen 2
T Interface-Referenz Allgemeine Java-Themen 2
L interface abstrakte klasse Allgemeine Java-Themen 21
S Interface Geschäftslokik & GUI Allgemeine Java-Themen 6
G Interface zwischen 2 Programmierern Allgemeine Java-Themen 10
N List<? implements "Interface"> geht nicht Allgemeine Java-Themen 13
D javadoc interface + implementation + @overrides Allgemeine Java-Themen 16
G Interface oder abstrakte Klasse Allgemeine Java-Themen 4
T Parameter einer Klasse auf Interface prüfen Allgemeine Java-Themen 6
A feststellen, welche Klassen ein Interface implementieren Allgemeine Java-Themen 3
G class, interface, or enum exp? Allgemeine Java-Themen 2
S Interface Klasse überladen. Allgemeine Java-Themen 2
K Inneres Interface äußere Klasse Allgemeine Java-Themen 7
T Frage zu interface und "guter Programmierstil" Allgemeine Java-Themen 4
T Interface "on-the-fly" implementieren? Allgemeine Java-Themen 3
S Frage zu Interface Allgemeine Java-Themen 7
J Objektorientiert - Interface & Klassen Allgemeine Java-Themen 3
G Interface - Klassen implementieren das - Reflection ok? Allgemeine Java-Themen 4
T "Programming against the interface" sinnvoll? Allgemeine Java-Themen 18
G Interface mehrfach implementieren Allgemeine Java-Themen 5
@ zur Laufzeit Interface aus jar implementieren? Allgemeine Java-Themen 5
A Was ist der genau Sinn eines Interface? Allgemeine Java-Themen 13
E Oberbergriff für class und interface Allgemeine Java-Themen 20
D QuickSort, Interface Allgemeine Java-Themen 2
R Interface für Arithmethik? Allgemeine Java-Themen 3
MQue Interface implementieren Allgemeine Java-Themen 7
P Liste von Klassen die ein Interface implementieren speichern Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben