extends und implements

Thisor

Bekanntes Mitglied
Hey Leute,

ich kann mir nicht genau den Unterschied zwischen extends und implements, bzw. die genaue Funktion von implements erklären.
Mein Wissen:
- extends: die Klasse die ein extends verpasst bekommt, ist in der Regel eine Tochterklasse die von der Superklasse erbt.
implements: implementiert Methoden von einer Klasse.
In Interface und abstrakte Klassen werden implements akzepiert aber nicht extends.

Wieso benutzt man implements? Ich würde jetzt aus dem ff sagen, um an Methoden von einer anderen Klasse ranzukommen. Aber ich könnte doch auch per punkt.notation die Methoden aufrufen??

mfg
 

Thisor

Bekanntes Mitglied
Verstehe ich das richtig:

Eine Mutterklasse beschreibt die Attribute, welches ein Objekt hat/haben kann.
Die Kinderklassen erben von der Mutterklasse die Attribute, welche definiert sind.
Ein Interface ist eine Schnittstelle, welche die Methoden/Attribute der Superklasse (ausschließlich Superklassen oder auch Kinderklassen?) animmt. Indem ich ein Interface in eine Klasse implementiere, werden (und müssen) die Methoden komplett ausimplementiert werden und diese werden dann der Klasse mitgegeben. Ist das nicht quasi das Gegenteil von erben? Ich könnte doch, statt implements, doch weiterhin extends verwenden, oder?
 

JStein52

Top Contributor
Ein Interface ist eine Schnittstelle, welche die Methoden/Attribute der Superklasse (ausschließlich Superklassen oder auch Kinderklassen?) animmt
Dieser Satz ist irgendwie vollkommen falsch. Ein Interface hat nichts mit Superklasse oder Kindklasse wie du sie nennst zu tun. Mit einem Interface sagst du eigentlich nur, jede Klasse die dieses Interface implementiert muss die Methoden die dieses Interface festlegt implementieren. Und wenn du eine vergisst meckert der Compiler. D.h. es ist sichergestellt dass diese Methoden auch tatsächlich implemeniert sind.
Du könntest so etwas auch mit einer abstrakten Klasse erreichen indem du dort abstrakte Methoden definierst die dann jede Klasse die von dieser abstrakten Klasse abgeleitet wird auch implementieren muss.
Da es in Java aber nur möglich ist von einer Klasse zu erben nutzt man Vererbung aber meist nicht in diesem Sinne.
 

Thisor

Bekanntes Mitglied
Dann kann ich also von jeder beliebigen Klasse ein Interface mit der dazugehörigen Methoden erstellen?
Wozu dient das eigentlich? Als Sicherheit um Fehler und Rendundanz zu vermeiden?
 

JStein52

Top Contributor
Dann kann ich also von jeder beliebigen Klasse ein Interface mit der dazugehörigen Methoden erstellen?
Das ist immer noch der falsche Ausdruck. Du erstellst kein Interface von einer Klasse. Du erstellst ein Interface. Darin sind Methoden definiert die dieses Interface ausmachen. Und dann definierst du Klassen die dieses Interface implementieren. D.h. die vom Interface verlangten Methoden implementieren.
Aber schau mal hier: http://openbook.rheinwerk-verlag.de...tml#dodtp4cdf05f9-ab55-4791-9fa2-c6929cc1a19d

Da ist das alles gut erklärt.
 

Thisor

Bekanntes Mitglied
Dann mal eins vorweg:
Kann ich ein Interface erstellen, welches Methoden aus mehreren Klassen enthält?
(Ob es Sinn macht ist im Moment irrelevant :p)
Werd´s mir durchlesen, muss mal eben weg, melde mich dann wieder - und thanks schonmal :)!
 

JStein52

Top Contributor
Du betrachtest es immer von der falschen Seite. Ein Interface enthält nicht Methoden aus einer Klasse.
Ein Interface sagt nur: Jede Klasse die dieses Interface implementiert muss die folgenden Methoden implementieren ..... Schau dir mal die Beispiele in der Java-Insel an !
 

Saheeda

Top Contributor
@Thisor
Du kannst ein Interface auch als Vertrag betrachtet. Jede Klasse, die es implementiert ("unterschreibt"), ist daran gebunden und muss sämtliche Methoden besitzen ("seine vertragl. Pflichten erfüllen"). Andernfalls ist der "Vertrag" ungültig (Compilefehler).
 

JStein52

Top Contributor
Du hattest vorhin gefragt:

Ich könnte doch, statt implements, doch weiterhin extends verwenden, oder?

Ja könntest du und das Stichwort wäre "abstrakte Klasse". Aber dabei ist folgendes zu bedenken:
Eine abstrakte Klasse und eine Schnittstelle sind sich sehr ähnlich: Beide schreiben den Unterklassen beziehungsweise den implementierenden Klassen Operationen vor, die sie implementieren müssen. Ein wichtiger Unterschied ist jedoch, dass beliebig viele Schnittstellen implementiert werden können, doch nur eine Klasse – sei sie abstrakt oder nicht – erweitert werden kann. Abstrakte Klassen können zusätzlichen Programmcode enthalten, was Schnittstellen nicht können. Auch nachträgliche Änderungen an Schnittstellen sind nicht einfach: Einer abstrakten Klasse kann eine konkrete Methode mitgegeben werden, was zu keiner Quellcodeanpassung für Unterklassen führt. Würde eine solche neue Methode in einer Schnittstelle vorgeschrieben, so müssten alle implementierenden klassen diese Implementierung neu einführen
 

mrBrown

Super-Moderator
Mitarbeiter
Würde eine solche neue Methode in einer Schnittstelle vorgeschrieben, so müssten alle implementierenden klassen diese Implementierung neu einführen
Mit Java 8 und default gilt das nur noch bedingt. Interface-Methoden müssen nur implementiert werden, wenn es keine oder mehrere default-Implementierungen gibt.
 

Thisor

Bekanntes Mitglied
@JStein52
Hab meinen Denkfehler gefunden :D
Ich habe bisher zuerst die Superklasse, dann Tochterklassen und anschließend ein Interface erstellt (so nach der Reihenfolge waren die Aufgaben zu bearbeiten).
Dadurch hatten die Methoden im Interface dieselbe Methoden (oder Methodennamen), welche sich auch in der Superklasse befanden. Denke dadurch habe ich es so aufgefasst, dass zuerst die Methoden (in einer Klasse) geschrieben werden müssen und erst dann darauf ein Interface erstellt werden kann, wobei mir die Freiheit gelassen wird, welche Methoden ich ins Interface gebe.
Grad ausprobiert - ist Quatsch. Ich kann im Interface Methoden reinschreiben welche ich mag, die Klassen die diese Implementierung bekommen, müssen diese Methoden mitbringen. Danke bis hierhin! Werde mich jetzt mal dem Link zuwidmen.

@Saheeda
Super Beispiel, sehr simpel und kurz gehalten! Könnten sich einige Professoren ein Beispiel nehmen :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
J Implements und Extends Java Basics - Anfänger-Themen 5
K Erste Schritte Extends Implements Java Basics - Anfänger-Themen 4
Y Threads extends Thread oder implements Runnable Java Basics - Anfänger-Themen 10
L Implements<-->extends und Interface Java Basics - Anfänger-Themen 10
N extends / implements / static, bedeutung ?? Java Basics - Anfänger-Themen 12
mrStudent <? extends T> und <? super T> Java Basics - Anfänger-Themen 1
N Variabel in eine class mit "extends JLabel" übertragen Java Basics - Anfänger-Themen 2
J extends Problem Java Basics - Anfänger-Themen 2
N extends und super vs new object Java Basics - Anfänger-Themen 4
D public ArrayList(Collection<? extends E> c); Java Basics - Anfänger-Themen 2
CptK Interface Klasse Frame (extends JFrame) aus anderer Klasse schließen Java Basics - Anfänger-Themen 7
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
M mehrere extends? Java Basics - Anfänger-Themen 19
J doppelname nach schlüsselwort extends Java Basics - Anfänger-Themen 4
V Was bewirkt das Schlüsselwort extends in Verbindung mit class bzw. public class ? Java Basics - Anfänger-Themen 2
Crazynet 2 extends Java Basics - Anfänger-Themen 22
S Wrapper Klasse und extends Java Basics - Anfänger-Themen 2
W Methoden Rückgabedatentyp java.util.Map<java.lang.String,? extends ...> Java Basics - Anfänger-Themen 4
R Vererbung Übergabe von Variablen der Superklasse an Subklasse mit "extends" Java Basics - Anfänger-Themen 5
S Threads Thread wenn extends schon vergeben Java Basics - Anfänger-Themen 8
vandread Java Wildcards - Wann super wann extends? Java Basics - Anfänger-Themen 2
F Anfängerfrage zu extends Java Basics - Anfänger-Themen 12
B addAll(Collection<? extends E> c) Java Basics - Anfänger-Themen 9
T Input/Output StructuredFileReader extends BufferedReader Java Basics - Anfänger-Themen 6
K Erste Schritte extends vererbung Java Basics - Anfänger-Themen 15
P Class<? extends Entity> Array Java Basics - Anfänger-Themen 9
A final und extends Java Basics - Anfänger-Themen 14
C Vererbung "extends" umgehen mittels Objekterzeugung?! Java Basics - Anfänger-Themen 29
T Collections Queue<? extends Number> add() offer() Java Basics - Anfänger-Themen 13
S Klasse extends HashMap Java Basics - Anfänger-Themen 20
L Problem mit Vererbung (extends) cannot find symbol Java Basics - Anfänger-Themen 3
D MyActionListener extends Thread Java Basics - Anfänger-Themen 3
H2SO3- Designfragen (mehrfach extends) Java Basics - Anfänger-Themen 11
G Unterschied e extends y vs ? extends y Java Basics - Anfänger-Themen 5
X List von Klasse B als List von Klasse A (B extends A) Java Basics - Anfänger-Themen 2
H extends Locale Java Basics - Anfänger-Themen 4
O import ja....extends nein Java Basics - Anfänger-Themen 5
G Muss es immer extends sein ? Java Basics - Anfänger-Themen 9
N class Test<E extends MyAbstractClass> => typ von E? Java Basics - Anfänger-Themen 5
K mehrere Extends Java Basics - Anfänger-Themen 2
S extends Vector<xyz> Java Basics - Anfänger-Themen 10
S new .() extends JDialog {.} Java Basics - Anfänger-Themen 15
S extends und Konstruktor Java Basics - Anfänger-Themen 8
E Interface extends Observable Java Basics - Anfänger-Themen 13
G Wiedermal vererbung, extends JDialog extends Exception ? Java Basics - Anfänger-Themen 8
U extends JLabel & Thread Java Basics - Anfänger-Themen 2
G Innere klasssen unde "extends" klassen definieren, Java Basics - Anfänger-Themen 2
frau-u JMenu mit extends JPanel? Java Basics - Anfänger-Themen 4
G "extends DBConnection" funktioniert nicht Java Basics - Anfänger-Themen 15
C Problem mit Zeichnen auf einer extends Canvas Class... Java Basics - Anfänger-Themen 2
F Casten bei Implements Java Basics - Anfänger-Themen 2
G Moving Objects with Threads (implements Runnable) Java Basics - Anfänger-Themen 1
B implements Java Basics - Anfänger-Themen 6
H 2 x implements Java Basics - Anfänger-Themen 2
V Merkwürdiges Problem mit Netbeans und implements Java Basics - Anfänger-Themen 10
T Geht so was? public void verkaufe (<X implements Produkt& Java Basics - Anfänger-Themen 8
J Datentyp einer Klasse bei Anwendung von implements Java Basics - Anfänger-Themen 4
G Implements Extendd. Unterschied Java Basics - Anfänger-Themen 3
U implements ? Java Basics - Anfänger-Themen 9
W Klassen durch implements abstrakt definieren Java Basics - Anfänger-Themen 6
H Problem mit Implements Java Basics - Anfänger-Themen 7
R "implements Serializable" Fehler beim kompilieren Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben