abstract - interface Unterschied

Status
Nicht offen für weitere Antworten.

toxice

Mitglied
Hallo,
ich schreib am Donnerstag eine Arbeit über die Grundlagen von Java.
Habe mir den Stoff gestern mal komplett durchgelesen, doch nun habe ich folgende Frage:
Was ist der Unterschied zwischen einer abstracten Klasse und einem Interface??
Bitte genaue Antworten.
THX :applaus:
 

Bleiglanz

Gesperrter Benutzer
abstrakte Klasse:

Methoden können ausprogrammiert werden ODER mit abstract deklariert werden, dann müssen sie in einer Unterklasse ausprogrammiert werden, man kann sogar ganz normale Konstruktoren programmieren usw.

Um eine "Instanz" zu erhalten muss man "Vererben", wird mit "extends" angezeigt


Interface:

es gibt überhaupt keine Möglichkeit etwas zu programmieren, alle Methoden sind automatisch public abstract, ein Interface ist also eine reine Sammlung von Methodensignaturen

Um eine "Instanz" zu erhalten, braucht man ein Objekt das alle Methoden implementiert (mit "implements" angezeigt)
 
B

bygones

Gast
Eine abstrakte Klasse kann Variablen definieren und Methoden implementieren.
Interfaces geben nur die Methodendefinition an.
 

m@nu

Bekanntes Mitglied
interfaces können auch dazu verwendet werden, einfach "nur" eine sammlung von statischen, finalen objekten zur verfügung zu stellen (z.b. konstanten fürs gui etc.)
 
B

bygones

Gast
m@nu hat gesagt.:
interfaces können auch dazu verwendet werden, einfach "nur" eine sammlung von statischen, finalen objekten zur verfügung zu stellen (z.b. konstanten fürs gui etc.)
Bad Practice... sollte man nicht machen... (obwohl es sowohl Sun selbst so macht...)
 

m@nu

Bekanntes Mitglied
naja, statisch halt schlussendlich... :-/
jop... die swing-konstanten sind doch über diese methode verfügbar, oder?
 

Toasterwilli

Aktives Mitglied
deathbyaclown hat gesagt.:
m@nu hat gesagt.:
interfaces können auch dazu verwendet werden, einfach "nur" eine sammlung von statischen, finalen objekten zur verfügung zu stellen (z.b. konstanten fürs gui etc.)
Bad Practice... sollte man nicht machen... (obwohl es sowohl Sun selbst so macht...)

Und warum, wenn ich fragen darf? Kann sein, dass ich beim Thema Code-Hygiene noch etwas Nachholbedarf habe... :wink:
 
G

Guest

Gast
deathbyaclown hat gesagt.:
m@nu hat gesagt.:
interfaces können auch dazu verwendet werden, einfach "nur" eine sammlung von statischen, finalen objekten zur verfügung zu stellen (z.b. konstanten fürs gui etc.)
Bad Practice... sollte man nicht machen... (obwohl es sowohl Sun selbst so macht...)
Sag's den Typen vom Eclipse Projekt. Die stecken alles in die Klasse SWT
als Konstanten rein. :? Ich könnte kotzen. :autsch:
 
R

Roar

Gast
Anonymous hat gesagt.:
deathbyaclown hat gesagt.:
m@nu hat gesagt.:
interfaces können auch dazu verwendet werden, einfach "nur" eine sammlung von statischen, finalen objekten zur verfügung zu stellen (z.b. konstanten fürs gui etc.)
Bad Practice... sollte man nicht machen... (obwohl es sowohl Sun selbst so macht...)
Sag's den Typen vom Eclipse Projekt. Die stecken alles in die Klasse SWT
als Konstanten rein. :? Ich könnte kotzen. :autsch:
SWT is auch kein interface
 
B

bygones

Gast
Toasterwilli hat gesagt.:
Und warum, wenn ich fragen darf? Kann sein, dass ich beim Thema Code-Hygiene noch etwas Nachholbedarf habe... :wink:
Ein Interface dient als Definition von Schnittstellen, etwas, was die betreffende Klasse ist bzw. kann. Ein reines Konstanteninterface karikatiert das Ganze und missbraucht den Sinn eines Interfaces....

OK, dann SwingConstants
das hat nix mit dem Eclipse Leuten zu tun - das ist Sun. Und wie oben erwähnt halten sich die Sun Leute leider nicht daran !
 
G

Guest

Gast
deathbyaclown hat gesagt.:
OK, dann SwingConstants
das hat nix mit dem Eclipse Leuten zu tun - das ist Sun. Und wie oben erwähnt halten sich die Sun Leute leider nicht daran !
Klar. Ich meinte es nur als Beispiel für Konstanten in einem Interface.
Auch das bei SWT (OK, eine Klasse, kein Interface) sind es einfach zu viele Sachen an einem Haufen.
Die Folge davon ist, dass unnötig viele Konstanten initialisiert werden, selbst wenn sie gar nicht benötigt
werden. Ich ziehe es vor, die Dinger dort zu lassen, wo sie hingehören, statt alles global zu definieren.
 
G

Gast

Gast
alles an einem ort hat aber auch vorteile, laesst sich so zum bsp besser aus einer konfigurationsdatei laden, weil man dann nicht auf diverse verschiedene klassen zugreifen muss (welche dann ja auch erzeugt wuerden) und beim zugriff aehnlich, man muss nicht suchen wenn es mehrere moegliche orte gibt...
meine meinung: nachdenken statt nachmachen ^^
 
S

Samuel

Gast
Sorry, das ich so einen alten Thread ausgrabe, aber ich schreib auch bald Prüfung :)

Was ich sagen wollte, ist nicht einer der wichtigsten Unterschieden zwischen abstrakten Klassen und Interfaces die Möglichkeite mit der abstrakten Klasse einen Containtern für Polymorphie zu schaffen, um jeder Subklasse Methoden und Attribute zu geben, die in dem Container gebraucht werden?

Beispiel: Wenn ich eine abstrakte Klasse Vertrag habe, welche den Rumpf einer Funktion "Status" behinaltet, weil man in einem Programm alle Arten von Verträgen in eine Liste packen will und dort bei allen status aufrufen. Mit interfaces müsste ja jeder Vertrag diese implementieren, machts einer nicht, schießt man sich damt ins Knie.
Wenn man aber von Vertrag erbt, zwingt der Compiler die Methode zu implementieren, ob man will oder nicht.

So ungefähr richtig?
 
B

Beni

Gast
Der Compiler reklamiert auch wenn man eine Methode vergisst, die in einem Interface definiert wurde. Bei deinem Beispiel kann man sich nicht ins Knie schiessen :wink:

Ich würde den wichtigsten Unterschied darin sehen, dass abstrakte Klassen bereits fertige Methoden haben dürfen, Interfaces aber nur die Methodensignaturen.
 
S

Samuel

Gast
Sehe ich nicht so, durch eine abstrakte Klasse hat man keine Wahl, als davon zu erben, andersrum müssten dann ale "Arten" von Veträgen ein Interface implementieren, vergißt das mal jemand, hast du den Salat
 
R

Roar

Gast
also mich zwingt niemand von ner klasse zu erben. folgendes ist genau gleichwertig:

Code:
abstract class Vertrag {
public String status();
}
ist das gleiche wie
Code:
interface Vertrag {
public String status();
}
und salat hat man nur wenn man was falsch macht.
 
S

Samuel

Gast
Das ist mir klar, aber Schnittstellen müssen geschaffen werden und was macht mehr Sinn, eine abstrakte Klasse Vertrag, oder ein Interface?
 
R

Roar

Gast
Samuel hat gesagt.:
Das ist mir klar, aber Schnittstellen müssen geschaffen werden und was macht mehr Sinn, eine abstrakte Klasse Vertrag, oder ein Interface?
hä :? anstrakte klassen müssen auch "geschaffen" werden :?
bei dem beispiel oben sind beide methoden genau gleichwertig, da macht keine methode mehr sinn. mehr sinn macht eine abstrakte klasse nur, wenn man auch die methoden implementiert, wie Beni sagte. ansonsten ist ein interface vorzuziehen.
 
B

Beni

Gast
Samuel hat gesagt.:
Das ist mir klar, aber Schnittstellen müssen geschaffen werden und was macht mehr Sinn, eine abstrakte Klasse Vertrag, oder ein Interface?
Beides. Ein Interface Vertrag, und eine abstrakte Klasse die einige Methoden von Vertrag implementiert. Damit kann der Programmierer stets entweder Code sparen, oder alles selbst machen, je nachdem, was gerade besser passt.
 
B

bygones

Gast
wie Beni meint beides bereitzustellen ist schön - manchmal aber auch unnötig...

Im Grunde musst du eben wissen, ob es für deine Klasse schon eine Vererbungshierarchie gibt, so dass abstrakte Klassen schonmal wegfallen. Des weiteren, sobald du Methoden implementieren kannst oder Variablen definieren willst, ist natürlich das Interface unsinn.

Und falls es noch nicht gesagt wurde:

Ein Interface ist eine Spezialform einer abstrakten Klasse
 

byte

Top Contributor
Samuel hat gesagt.:
Beispiel: Wenn ich eine abstrakte Klasse Vertrag habe, welche den Rumpf einer Funktion "Status" behinaltet, weil man in einem Programm alle Arten von Verträgen in eine Liste packen will und dort bei allen status aufrufen. Mit interfaces müsste ja jeder Vertrag diese implementieren, machts einer nicht, schießt man sich damt ins Knie.
Wenn man aber von Vertrag erbt, zwingt der Compiler die Methode zu implementieren, ob man will oder nicht.

So ungefähr richtig?

Der Compiler zwingt Dich auch, die Methoden des Interface zu implementieren, wenn Du "implements DeinInterface" hinter die Klasse schreibst. Aber durch ne abstrakte Klasse kannst Du halt schon einen Teil der Implementierung vorschreiben, während Interfaces das gänzlich an die implementierende Klasse delegieren.

Demnach könnte ein Vertrag, der das Interface implementiert, immer den Status "alles super" zurückgeben, Du hast da keinen Einfluß mehr auf die Art und Weise, wie das ganze implementiert ist.

/edit: huch, viel zu langsam ... ???:L
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Unterschied abstract interface und interface Allgemeine Java-Themen 4
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
T Interface > Abstract > Class Allgemeine Java-Themen 11
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
S static mit abstract und in interface Allgemeine Java-Themen 10
E Methoden abstract static Methode Allgemeine Java-Themen 8
L Vererbung Using @Autowired in Abstract Classes Allgemeine Java-Themen 4
S Frage zu abstract Allgemeine Java-Themen 5
Bananabert Abstract ArrayList Allgemeine Java-Themen 4
G Abstract class Stillfrage Allgemeine Java-Themen 4
H2SO3- abstract class mit Beispielen in abstracten Methoden Allgemeine Java-Themen 5
M abstract Methode aufrufbar? Allgemeine Java-Themen 3
O abstract, privat, Vererbung Allgemeine Java-Themen 29
T abstract + clone() = BUMM! Allgemeine Java-Themen 3
M ist "public abstract class * extends" möglich? Allgemeine Java-Themen 2
N Reflection: Feststellen ob eine Klasse abstract ist Allgemeine Java-Themen 3
B frage zu "file.renameTo()" bzw. abstract path allg Allgemeine Java-Themen 8
D Interface, aber die Methoden bleiben teilweise gleich Allgemeine Java-Themen 35
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
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
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
S interface verbung problem Allgemeine Java-Themen 9
S problem programm mit interface: 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
C Schnittstellen(interface) Allgemeine Java-Themen 9
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

Ähnliche Java Themen


Oben