wieso "implements"

Status
Nicht offen für weitere Antworten.
G

gast-rinc

Gast
Hallo,
ich wundere mich über eine Sache:

Mit "Implements" importiert man keine Funktionalität, sondern nur eine Blaupause für die Klasse. Aber trotzdem kann man nicht darauf verzichten.

Beispiel: eine Klasse die ActionListener implementiert kann Events verarbeiten, aber mit den selben Methoden nur ohne "implements ActionListener" kann sie es nicht. - WIESO????

Zur Verdeutlichung - wieso funktioniert dieser Code:

Code:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ActionTest extends Applet implements ActionListener {
	private Button b = new Button("Change color");
	private Color c;
	
	public void init(){
		add(b);
		b.addActionListener(this);
		c = Color.ORANGE;
	}
	
	public void paint (Graphics g) {
		setSize(200, 150);
		g.setColor(Color.BLUE);
		setBackground(c);
	}

	public void actionPerformed(ActionEvent arg0) {
		c = Color.MAGENTA;
		repaint();
	}
}

aber dieser nicht:

Code:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ActionTest extends {
	private Button b = new Button("Change color");
	private Color c;
	
	public void init(){
		add(b);
		b.addActionListener(this);
		c = Color.ORANGE;
	}
	
	public void paint (Graphics g) {
		setSize(200, 150);
		g.setColor(Color.BLUE);
		setBackground(c);
	}

	public void actionPerformed(ActionEvent arg0) {
		c = Color.MAGENTA;
		repaint();
	}
}
???
Der Unterschied liegt in Zeile 7

Bin für eine Antwort sehr dankbar!!!

Grüße rinc
 

Wildcard

Top Contributor
Code:
public class ActionTest extends {
Was willst du denn extenden? Die '{'? :autsch:
 
G

Guest

Gast
Entschuldigung, zu viel gelöscht:
Code:
public class ActionTest extends Applet {
 

Wildcard

Top Contributor
Die Antwort ist ganz einfach:
laut Methoden Signatur erwartet JButton#addActionListener einen ActionListener und kein Applet :roll:
 
G

gast-rinc

Gast
aber wieso funktioniert dass nur, wenn ich ActionListener implementiere. In
Code:
 interface ActionListener {...}
ist doch keine Funktionalität enthlten. Diese habe ich in meiner Klasse eingebaut und sie bleibt erhalten, egal ob ich ActionListener implementiere oder nicht???
 

byte

Top Contributor
Indem Du das Interface implementierst, definierst Du, dass die Klasse von diesem Typ ist. Du kannst dann Objekte dieser Klasse überall dort verwenden, wo Objekte dieses Interface-Typs gewünscht sind. Denn durch das implements wird sichergestellt, dass die Methoden des Interfaces auf jeden Fall vorhanden sind. Natürlich könntest Du die Methoden auch implementieren ohne das implements. Aber dann ist die Typsicherheit nicht gewährleistet.
 
G

Guest

Gast
wenn ich ActionListener nicht implementiere funktioniert das Applet nicht mehr.

Weiss javac oder java, dass es bestimmte Dinge tun muss, wenn ich z.B. ActionListener implementiere?
Oder wie kann man erklären, dass das erste Beispiel funktioniert und das zweite nicht?
 

byte

Top Contributor
Das liegt an folgender Zeile:

Code:
b.addActionListener(this);

Die methode Button#addActionListener() erwartet als Parameter ein Objekt von Typ ActionListener. Da Du this übergibst, muss this auch ActionListener implementieren.
 

Tobias

Top Contributor
Eine Klasse ist ein eigener Typ. Ausserdem ist sie gleichzeitig vom Typ ihrer Oberklassen (und deren Oberklassen bis hin zu 'Object') UND vom Typ all ihrer implementierten Interfaces.

addActionListener() erwartet ein Argument vom Typ ActionListener. Diesen Typ kann deine Klasse aber nur repräsentieren, wenn es das Interface ActionListener implementiert.

javac weiß, dass eine Klasse, in deren Kopf 'implements ActionListener' steht, problemlos nach ActionListener gecastet werden kann und die dort definierten Methoden anbietet.

mpG
Tobias
 

Tellerrand

Bekanntes Mitglied
gast-rinc hat gesagt.:
Diese habe ich in meiner Klasse eingebaut und sie bleibt erhalten, egal ob ich ActionListener implementiere oder nicht???
Das Interface sorgt nur dafür, dass du diese Funktionalität implementieren musst.
Es geht rein darum zu garantieren, dass die Methode public void actionPerformed(ActionEvent arg0) vorhanden ist.

Wenn du das Interface nicht implementierst, dann ist nicht sichergestellt, dass es die Methode gibt, ergo ... fehler ;)
 
G

Guest

Gast
ok, vielen dank für die Antworten.

Wenn ich das richtig verstehe weiss javac, dass er bestimmte Dinge tun muss wenn bestimmte Interfaces implementiert werden.
 

Wildcard

Top Contributor
Wie dir bereits erklärt wurde.
Ein Interface definiert lediglich eine 'verhält sich wie ein' im Gegensatz zu 'ist ein' (extends) Beziehung.
Beide Beziehungen haben allerdings gemein das man Objekte auf den Typ casten können den sie extenden oder implementieren.
Genau diese Technik wird hier angewendet und kein magischer Compiler der dir plötzlich events zuschubst nur weil da ein implements steht.
Der Quellcode ist doch kein Geheimnis. Schau dir doch selbst an was addActionListener macht und wie die Listener List verwendet wird.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
P Wieso benutzen PriorityQueues Heaps? Allgemeine Java-Themen 2
Y Wieso krieg ich die Unit Tests nicht hin Allgemeine Java-Themen 55
I Wieso funktioniert das nich? Allgemeine Java-Themen 5
F Input/Output NullPointerException, aber wieso? [Apache POI] Allgemeine Java-Themen 11
R MAC-Adresse eindeutig für einen PC ? Bezug zu Netzwerk, wieso ? Allgemeine Java-Themen 7
P Best Practice Wieso funktioniert der Modulo - Operator nicht? Allgemeine Java-Themen 2
J Jasper ireport - wieso beendet die Anwendung wenn ich die Preview schließe Allgemeine Java-Themen 1
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
A Methoden Generische Methode mit Arrays - Source Compatibility 1.7 benötigt, wieso? Allgemeine Java-Themen 3
S RemoteException wieso ? Allgemeine Java-Themen 6
J if else Anweisung macht nicht was es soll. Wieso? Allgemeine Java-Themen 10
P wieso kann ich auf bluej exportieren aber auf eclipse nicht? Allgemeine Java-Themen 2
DEvent Wieso ist Javadoc mit Html Tags? Allgemeine Java-Themen 47
D java.util.InputMismatchException im Scanner -wieso? Allgemeine Java-Themen 5
E Wieso returnt das hier 1? Allgemeine Java-Themen 3
DStrohma [Erledigt] Wieso kann ich Taste 'ENTER' in JTable nicht belegen? Allgemeine Java-Themen 2
C Wieso funktioniert das? Allgemeine Java-Themen 6
W Wieso funktioniert dieser Code hier? Allgemeine Java-Themen 6
S Wieso stehen in der API immer wieder abstrakte Methoden ? Allgemeine Java-Themen 7
lacyuu Schleife hängt sich auf, wieso?? Allgemeine Java-Themen 2
V Wieso meckert FindBugs da? Allgemeine Java-Themen 7
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
V Wieso Heap Space Problem? Allgemeine Java-Themen 14
J Wieso implementiert HTTPServlet Serializable? Allgemeine Java-Themen 2
P Wieso skalieren diese beiden Threads unterschiedlich gut? Allgemeine Java-Themen 16
zilti Wieso geht der StreamReader/Writer nicht? Allgemeine Java-Themen 5
T Wieso erfolgt keine Ausgabe. /Excel Allgemeine Java-Themen 19
G wieso wird der String des StringBuilder immer länger? Allgemeine Java-Themen 2
S Problem mit generics -> ClassCastException und ka wieso Allgemeine Java-Themen 20
G Übergabe funzt nicht, aber wieso? Allgemeine Java-Themen 3
G NullPointer ? wieso? Allgemeine Java-Themen 7
I Wieso läuft Programm bei Kollegen aber nicht bei mir? Allgemeine Java-Themen 10
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
ruutaiokwu AVLTree implements SortedMap - hat jemand sowas? Allgemeine Java-Themen 3
C Kann Methode nicht aus Klassenname implements Runnable nutzen Allgemeine Java-Themen 7
N List<? implements "Interface"> geht nicht Allgemeine Java-Themen 13
K ActionListener ohne implements? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben