Abstrakte Methode in gleicher Klasse aufrufen

Status
Nicht offen für weitere Antworten.

ggirl

Mitglied
Hallo,

ich arbeite gerade ein Tutorial durch, das scheinbar einen Feler hat, den ich nicht lösen kann.
(die 3 problematischen Code-Zeilen: 74, 79, 93)
In der Klasse ImageButton ist eine abstrakte Methode "definiert", die jedoch in der selben Klasse auch wieder innerhalb einer anderen Methode aufgerufen wird.

Was die Methode genau macht ist in der Klasse RolloverButton definiert, die ImageButton "extends".

Ich dachte eigentlich, dass abstrakte Methoden beim deklarieren keine Übergabeparameter haben,
allerdings motzt dann eclipse. Gibt es eine Möglichkeit anzugeben, dass die abstrakte Methode mit 2 Übergabeparametern vom Typ boolean arbeiten wird?

Oder woran liegt es, dass ich in diesem Fall Fehler bekomme und bei der Deklaration von handleMousePressed() nicht (auch diese Methode wird innerhalb einer anderen Methode in der Klasse auch noch einmal aufgerufen in Code Zeile 64 / 95).


Anbei der Code mit der Hoffnung, dass ihr mir helfen könnt:


Code:
import java.awt.*;
import java.awt.event.*;
import java.util.Hashtable;


public abstract class ImageButton extends Component {
  
	// nur für abgeleitieten Klassen zugänglich
	protected Hashtable imageHash; //Bildname zum Ansprechen
	protected Image image;
	protected String imageName;
	protected boolean isMouseDown = false;
	protected boolean isMouseInside = false;
	protected String actionCommand; // erlaubt den Objekten, die vom Button ein ActionEvent erhalten die Quelle der Nachricht zu bestimmen
	protected ActionListener listener = null;
	
	public ImageButton(){
		
		//Listener registrieren
		Mouse aMouse = new Mouse();
		this.addMouseListener(aMouse);
		//Status-Information initialisieren
		imageHash = new Hashtable();
		actionCommand = "ImageButton Action";
	}

/* 
 * Zeichnet den Button
 * wird aufgerufen, wenn die Komponente zum ersten Mal aufgerufen wird oder eine Update-Nachfrage vorliegt
 * @parameter: g > für die Grafik spezifiertes Fenster
 */
	public void paint(Graphics g){
		
		//"Super-Klasse" zeichnet, dann die Zeichnung des aktuellen Bilds hier behandeln
		super.paint(g);
		
		if (image != null){
			g.drawImage(image, 0, 0, this);
		}
	}
	
	//innere Klasse zum Behandeln von Mouse-Events
	class Mouse extends MouseAdapter{
		
		public void mouseExited(MouseEvent event){
			ImageButton_MouseExited(event);
		}
		
		public void mouseEntered(MouseEvent event){
			ImageButton_MouseEntered(event);
		}
		
		public void mouseReleased(MouseEvent event){
			ImageButton_MouseReleased(event);
		}
		
		public void mousePressed(MouseEvent event){
			ImageButton_MousePressed(event);
		}
	}
	
	protected void ImageButton_MousePressed(MouseEvent event){
		isMouseDown = true;
		handleMousePressed();
	}
	
	protected void ImageButton_MouseReleased(MouseEvent event){
		isMouseDown = false;
		handleMouseRelease(isMouseInside);
	}
	
	protected void ImageButton_MouseEntered(MouseEvent event){
		isMouseInside = true;
		handleRollover(isMouseInside,isMouseDown);
	}
	
	protected void ImageButton_MouseExited(MouseEvent event){
		isMouseInside = false;
		handleRollover(isMouseInside,isMouseDown);
	}
	
/*
 * Wird aufgerufen, wenn gedrückter Button losgelassen wird
 * @parameter: isMouseInside > true wenn Maus im Buttonbereich geortet wird
 * @parameter: isMouseInside > false ... do nothing
 */	
	protected void handleMouseRelease(boolean isMouseInside){
		
		if(isMouseInside)
			fireActionEvent();// sended Nachrichten zu allen Objekten, die für den Button als Listener registriert sind um sie zu informieren, dass der Button gedrückt wurde
	}
	
	protected abstract void handleRollover(); // Implementiert in RolloverButton.java
	
	protected abstract void handleMousePressed(); // Implementiert in RolloverButton.java
	
/*
 * Legt ein Bild auf den Button
 * @parameter: imagePath > Ort der Bildquelle (relative Pfadangabe)
 * @parameter: imageName > Referenz-Name des Bilds (nicht der Dateiname), identifiziert Bild für späteren Einsatz im Button
 */	
	public void addImage(String imagePath,String imageName){
		
		//Anforderungen für Hashtable nicht erfüllt > Methode verlassen
		if(imageName !=null && !imageName.equals("")){
			Image newImage = Misc.loadImage(imagePath, this,true);
			if(newImage != null){
				imageHash.put(imageName,newImage);
			}
		}
	}
	
/* 
 * Loescht das Bild eines Buttons
 * @parameter: imageName > Referenz-Name des Bilds
 */	
		public void removeImage(String imageName){
			
			//Anforderungen für Hashtable nicht erfüllt > Methode verlassen
			if(imageName !=null && !imageName.equals("")){
				imageHash.remove(imageName);
			}
		}	
	
	
/* 
 * Aendert das Bild eines Buttons
 * @parameter: imageName > Referenz-Name des Bilds
 */	
	public void setImage(String imageName){
		
		//Anforderungen für Hashtable nicht erfüllt > Methode verlassen
		if(imageName !=null && !imageName.equals("")){
			Image temp = (Image)imageHash.get(imageName);
			if(temp != null){
				image = temp;
				this.imageName = imageName;
				repaint();
			}
		}
	}
	
/*
 * Liefert den Namen des aktuellen Bilds
 * @return: Referenz-Name des Bilds
 */	
	public String getImage(){
		return imageName;
	}
	
/*
 * Setzt den command-Namen des Action Events, das vom Button ausgelöst wurde
 */	
	public void setActionCommand(String command){
		actionCommand = command;
	}
	
/*
 * Gibt den command-Namen des Action Events, das vom Button ausgelöst wurde, zurück
 */	
	public void getActionCommand(ActionListener l){
		listener = AWTEventMulticaster.add(listener,l);
	}

/*
 * Entfernt eeinen bestimmten Action Listener, damit der Button keine Events mehr von Ihm erhält
 */
	public void removeActionListener(ActionListener l){
		listener = AWTEventMulticaster.remove(listener,l);
	}	

/*
 * "Feuert" ein Action Event zu den Listenern
 */
	protected void fireActionEvent(){
		if (listener != null){
			listener.actionPerformed(new ActionEvent (this, ActionEvent.ACTION_PERFORMED, actionCommand));
		}
	}
	
/*
 * Gibt die bevorzugte Größe des Buttons zurück, damit der LayoutManager die Buttongröße kalkulieren kann
 * überschreiben der Methode von java.awt.Component
 */	
	public Dimension getPreferredSize(){
		if (image != null){
			return new Dimension(image.getWidth(this),image.getHeight(this));
		}
		return super.getPreferredSize(); // default-Verhalten der Komponente benutzen
	}
}
[/code]
 

Marco13

Top Contributor
???:L Was genau jetzt die Frage ist... Hm. Du könntest - FALLS ich das richtig verstanden habe - einfach schreiben
Code:
protected abstract void handleRollover(boolean a, boolean b);
und in der Implementierenden Klasse (RolloverButton) dann eben
Code:
protected void handleRollover(boolean a, boolean b)
{
 ...
}
.... Meintest du das? Oder darf die Methode nicht verändert werden?
 

ggirl

Mitglied
Ja danke, das hab ich gemeint! Freu!

Uns wurde in der Vorlesung halt knallhart erzählt, dass man sowas bei abstrakten Klassen nicht macht.. wäre deshalb nicht auf die Idee gekommen.

Nochmal FETTES DANKE für deine Hilfe, Marco!
 

Wildcard

Top Contributor
Dann hat man euch kompletten Unsinn erzählt. Eine Methode wird eindeutig durch ihre Signatur (Name + Parameterliste) bestimmt. Die Signatur muss daher auch bei der abstrakten Definition so angegeben werden, wie sie später aussehen soll. :autsch:
 

Marco13

Top Contributor
Naja, wenn das nicht nur gesagt sondern auch irgendwie begründet werden würde, würde mich der Grund mal interessieren. Vielleicht gibt es irgendein abstrus-theoretisches Argument, weswegen man das als "schlechten Stil" oder so bezeichnen könnte... aber das würde ich jetzt zum ersten Mal hören ???:L
 

ggirl

Mitglied
Begründet ist es nicht - scheinbar hat unser Dozent aus "Java ist auch eine Insel" abgekupfert und das Musterbeispiel dort einfach ein wenig verändert. Das geht nämlich auch nicht in die Tiefe...

Das Kapitel abstrakte Klassen und Methoden wurde bei uns in der Vorlesung sehr schnell abgehandelt - hätte wirklich intensiver sein sollen meiner Meinung nach.

Wenn ich so überlege ist es nicht so prickelnd, Anfängern einfach zu erzählen, dass eine abstrakte Methode so auszusehen hat wie ich es dachte.

Da zeigt sich mal wieder, dass manche Dozenten nur Theoretiker sind, die übernehmen, was andere geschrieben haben.

Bin froh, dass es Foren gibt, in denen die "Praktiker" vertreten sind. Da zeigt sich mal wieder, dass diejenigen, die sich tagtäglich mit der Sache beschäftigen mehr Ahnung haben als irgendwelche Dr. Prof. XXX.

Danke nochmal für die Hilfe!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Abstrakte Methode nutzen Java Basics - Anfänger-Themen 9
J abstrakte Methode in Klasse mit Rückgabetyp der abgeleiteten Klasse Java Basics - Anfänger-Themen 5
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
A Abstrakte Datentypen - Methode delete Java Basics - Anfänger-Themen 6
E verdeckte abstrakte Methode sinnvoll? Java Basics - Anfänger-Themen 7
A Vererbung Abstrakte Klasse mit Methode die Objekte der Subklassen benutzt? Java Basics - Anfänger-Themen 7
B Abstrakte Methode vs. Interface Java Basics - Anfänger-Themen 2
V Vererbung Abstrakte Methode Java Basics - Anfänger-Themen 3
StupidAttack Abstrakte Methoden in nicht-abstrakter Methode in abstrakter Klasse Java Basics - Anfänger-Themen 6
S Abstrakte Klasse, festlegen, dass Methode verändert werden muss. Java Basics - Anfänger-Themen 4
J abstrakte klasse und methode super Java Basics - Anfänger-Themen 2
L abstrakte Methode nicht implementiert! Java Basics - Anfänger-Themen 5
A Eine abstrakte Methode static machen? Java Basics - Anfänger-Themen 4
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
S abstrakte methoden in subclass? Java Basics - Anfänger-Themen 7
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
G Java Abstrakte Methoden Java Basics - Anfänger-Themen 2
T Abstrakte Klasse und Interfaces Java Basics - Anfänger-Themen 12
D Abstrakte Klasse, Konstruktorkette, Attribute setzen Java Basics - Anfänger-Themen 12
L Abstrakte Typen und Schnittstellen Java Basics - Anfänger-Themen 19
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
T Übungsaufgabe abstrakte Klasse Java Basics - Anfänger-Themen 21
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
M Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen Java Basics - Anfänger-Themen 8
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Datentypen Abstrakte Datentypen Java Basics - Anfänger-Themen 0
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
K Abstrakte Klasse: vererbte Klasse; instance of? Java Basics - Anfänger-Themen 26
N Vererbung Abstrakte Klasse stateful Java Basics - Anfänger-Themen 3
D Abstrakte Klassen Verständniss Frage Java Basics - Anfänger-Themen 4
D Methoden Abstrakte Methoden Java Basics - Anfänger-Themen 3
W Abstrakte Klasse mit Variable? Java Basics - Anfänger-Themen 2
D Interface Interfaces und abstrakte Klassen implementieren Java Basics - Anfänger-Themen 4
B Abstrakte Klassen Java Basics - Anfänger-Themen 7
C Abstrakte und virtuelle Methoden in Java Java Basics - Anfänger-Themen 4
W Abstrakte und konkrete Klasse Java Basics - Anfänger-Themen 4
S Abstrakte Klassen Java Basics - Anfänger-Themen 2
C Dynamische Referenz & abstrakte Klassen Java Basics - Anfänger-Themen 3
F Abstrakte Klasse doch zum "Teil" instanzieren? Java Basics - Anfänger-Themen 4
V Interface Interfaces und abstrakte Klassen Java Basics - Anfänger-Themen 3
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
G Abstrakte Klassen - theoretische Frage Java Basics - Anfänger-Themen 2
OnDemand Abstrakte Klassen Java Basics - Anfänger-Themen 4
T OOP Abstrakte Klassen und ihre Kinder: wie läuft das? Java Basics - Anfänger-Themen 3
M Statische Methoden in Interface/Abstrakte Klasse Java Basics - Anfänger-Themen 6
M Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Interfaces Abstrakte Klassen Java Basics - Anfänger-Themen 15
M Interface und Abstrakte Klassen Java Basics - Anfänger-Themen 12
N Datentypen abstrakte Klasse wird instanziert Java Basics - Anfänger-Themen 3
D Methoden abstrakte Methoden und Rückgabewerte Java Basics - Anfänger-Themen 2
propra Interface - abstrakte Klasse Java Basics - Anfänger-Themen 18
N Abstrakte Klasse Java Basics - Anfänger-Themen 28
R Namenskonvention abstrakte Klassen Java Basics - Anfänger-Themen 6
C OOP Objektstruktur: abstrakte Klassen Java Basics - Anfänger-Themen 3
L Über abstrakte Klasse auf eine Klasse zugreifen? Java Basics - Anfänger-Themen 6
T OOP abstrakte klassen - methoden Java Basics - Anfänger-Themen 8
M Abstrakte Klassen Java Basics - Anfänger-Themen 21
J Welchen Sinn haben abstrakte Methoden? Java Basics - Anfänger-Themen 4
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
D Abstrakte Klassen und Interfaces als Paramter in Funktionen Java Basics - Anfänger-Themen 3
T Abstrakte Klasse Java Basics - Anfänger-Themen 3
S Abstrakte Klasse Java Basics - Anfänger-Themen 5
T Interfaces: Braucht man abstrakte Klassen eigentlich noch? Java Basics - Anfänger-Themen 3
T OO, Konstruktor, abstrakte Methoden Java Basics - Anfänger-Themen 13
K Abstrakte Klasse vs. Interface Java Basics - Anfänger-Themen 21
T Abstrakte Klassen Java Basics - Anfänger-Themen 6
C abstrakte Klassen mögen mich nicht... Java Basics - Anfänger-Themen 2
I Abstrakte Klassen Java Basics - Anfänger-Themen 8
K Abstrakte Klasse bilden? Java Basics - Anfänger-Themen 11
D Zusammenfassung von Klassen (Vererbung? Abstrakte Klass? ...?) Java Basics - Anfänger-Themen 8
H Warum Java? | Abstrakte Klasse = Modul? Java Basics - Anfänger-Themen 20
G Abstrakte Klassen und Methoden Java Basics - Anfänger-Themen 3
C Schnittstellen und Abstrakte Klassen Java Basics - Anfänger-Themen 3
I Abstrakte Klassen Java Basics - Anfänger-Themen 22
H Eine Abstrakte Klasse muss. Java Basics - Anfänger-Themen 7
G Abstrakte Klasse "Point" Java Basics - Anfänger-Themen 2
G Abstrakte Klassen ? Java Basics - Anfänger-Themen 9
M abstrakte Klasse Java Basics - Anfänger-Themen 3
nadoria abstrakte Klassen Java Basics - Anfänger-Themen 6
F Abstrakte Klasse: Konstruktor vs init() Java Basics - Anfänger-Themen 13
M Unterscheid Abstrakte Klassen/Interface Klassen? Java Basics - Anfänger-Themen 7
G Abstrakte Klasse (was passiert hier) Java Basics - Anfänger-Themen 3
T abstrakte Klassen? Java Basics - Anfänger-Themen 2
G Interface oder Abstrakte Klasse? Java Basics - Anfänger-Themen 3
G konkretes beispiel: interface hier besser als abstrakte kl. Java Basics - Anfänger-Themen 4
Acha Unterschied Interface - abstrakte Klasse Java Basics - Anfänger-Themen 4
M abstrakte klassen und interfaces Java Basics - Anfänger-Themen 2
B OOP: abstrakte klasse implementiert interface Java Basics - Anfänger-Themen 3
M abstrakte klassen / Schnittstellen Java Basics - Anfänger-Themen 4
H abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 13
D Abstrakte Klasse Graphics Java Basics - Anfänger-Themen 3
R Interfaces durch abstrakte Klassen ersetzbar? Java Basics - Anfänger-Themen 8
A Abstrakte Klasse Java Basics - Anfänger-Themen 3
G abstrakte klasse Java Basics - Anfänger-Themen 6
F Abstrakte Klasse Baum Java Basics - Anfänger-Themen 6
A Abstrakte Klassen und Interfaces Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben