# <class> is not abstract and does not override abstract



## kontur (1. Okt 2005)

Hallo zusammen.

Ich bin zwar blutiger Anfänger, denke aber meine Frage ist in diesem Teil des Forums besser aufgehoben.

Ich habe mir von Sun's Tutorialseite folgendes Beispiel geholt um daran die Grundlagen von swing etwas kennenzulernen. (java hier: link)

Nun wollte ich das ganze in ein einfaches Programm umschreiben, welches zwei Zahlen einließt und die Summe anzeigt. Der Part mit dem Auslesen bereitet mir zwar Probleme, bzw muss ich mir das noch anschauen, deswegen findet ihr ihn im Quelltext unten im Kommentar, aber das ist nicht weswegen ich poste.

Mein Problem nun ist, das habe ich per Suche und FAQ schon gesehen, wohl gut bekannt.
Ich bekomme in der cmd den Fehler, dass meine Klasse nicht abstrakt ist und die abstrakte Methode actionPerformed nicht überschreibt.

Da ich weder aus den Posts schlau werde (hmm...Anfänger) noch verstehe, warum meine Kopie des Sun-Tutorials nicht funktioniert würde ich hier um Hilfe bitten.

Hier der Quelltext, wie gesagt bewusst nah an dem Beispiel, aber irgendwo ist der Wurm drin. (Das Beispiel von Sun wird ohne Probleme kompiliert.)


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class KaksiLukuaSwing implements ActionListener {
	//DECLARE components
	JFrame calculatorFrame;
	JPanel calculatorPanel;
	JTextField figure1;
	JTextField figure2;
	JLabel resultSum;
	JButton calculate;
	
	
	//PUBLIC METHOD defining the components
	public KaksiLukuaSwing() {
		//create and set window
		calculatorFrame = new JFrame("Calculate with two figures");
		calculatorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		calculatorFrame.setSize(new Dimension(400,50));
		
		//create and set up the panel
		calculatorPanel = new JPanel(new GridLayout(2,2));
		
		//use a method that implements the components
		addComponents();
		
		//set the default button
		calculatorFrame.getRootPane().setDefaultButton(calculate);
		
		//add the panel to the window
		calculatorFrame.getContentPane().add(calculatorPanel, BorderLayout.CENTER);
		
		//display the window
		calculatorFrame.pack();
		calculatorFrame.setVisible(true); 
	} //end Calculator()
	
	
	//PUBLIC METHOD implementing the components
	private void addComponents(){
		figure1 = new JTextField(5);
		figure2 = new JTextField(5);
		resultSum = new JLabel("Sum: ", SwingConstants.LEFT);
		calculate = new JButton("Calculate");
		
		//listen to events from the calculate button
		calculate.addActionListener(this);
		
		//put them to the container
		calculatorPanel.add(figure1);
		calculatorPanel.add(figure2);
		calculatorPanel.add(resultSum);
		calculatorPanel.add(calculate);
	} //end actionPerformed()		
	
	
	//PUBLIC ACTIONPERFORMED
	public void actionPerfomed(ActionEvent event){
		// calculations are done here
	//	int sum = ((parseInt(figure1.getText())) + (parseInt(figure2.getText())));
		resultSum.setText("test");
	} //end addComponents()		
	
	
	//PUBLIC STATIC CREATE AND SHOW GUI
	private static void setAndSetFrame(){
		KaksiLukuaSwing myCalc = new KaksiLukuaSwing();
	} //end setAndSetFrame()
	
	
	//PUBLIC STATIC MAIN
	public static void main(String[] args){
		javax.swing.SwingUtilities.invokeLater(new Runnable(){
			public void run(){
				setAndSetFrame();
			}
		});
	}
}
```


Meint 





> Es müssen alle Methoden eines implementierten Interfaces überschrieben werden, wenn die Klasse nicht abstrakt ist.


 (FAQ), dass alle von mir benutzten Methoden überschrieben werden müssen, oder wie? Inwiefern erfüllt das mein Quelltext nicht?

Danke im Vorraus,
kontur


----------



## Roar (1. Okt 2005)

kontur hat gesagt.:
			
		

> Ich bin zwar blutiger Anfänger, denke aber meine Frage ist in diesem Teil des Forums besser aufgehoben.


ne. *verschoben*



> Meint
> 
> 
> 
> ...



es müssen alle methoden implementiert werden, die vom interface spezifiziert werden.
das interface hat eine methode actionPerformed(ActionEvent), darum musst du auch eine actionPerformed(ActionEvent) in deiner klasse implementieren. hast du aber nicht, nur so'ne komische actionPerfomed(ActionEvent)...


----------



## Bleiglanz (1. Okt 2005)

reiner Schreibfehler 

wenn du Anfänger bist, dann gewöhn dir gleich an beim Überschreiben einer Methode ein @Override davor hinzuschreiben

```
@Override
public void actionPerformed(ActionEvent event){
```

dann kann sowas nicht passieren!


----------



## kontur (1. Okt 2005)

Danke schonmal für die Antworten.

Was meinst du mit "komischer Methode"? Ich habe den Teil quasi übernommen, und auch finde ich in dem Beispiel kein "@Override".
Was bedeutet das "@Override"...habe auf Sun-page gesucht und nicht gefunden. Auch mit der Zeile davor kommt der gleiche Fehler. Was ist gemeint mit "das kann dann nicht passieren"?

Ich verstehe nicht, warum ich beim Kompilieren des Beispiels keine Fehler habe, bei meinem Versuch dann aber den obigen Fehler kriege. Mir fehlt der Einblick dazu, wo der Unterschied von meinem Versuch zu dem Beispielcode ist, da ich, so denke ich, quasi nur andere Namen verwendet habe.


Danke vorab für weitere Hilfe,
k.



P.s.: Ist wohl im doch gut im Anfängerforum...


----------



## Bleiglanz (1. Okt 2005)

Perfo*r*med


----------



## kontur (1. Okt 2005)

args...billiger Fehler. 
Danke und Sorry,
k.


----------

