# wie geht Klassenvererbung von Canvas Klassen



## DaNew (11. Mai 2010)

Hallo,

ich möchte in meinem MIDlet zwei Arten von Diagrammen anzeigen können, einmal ein xyDiagramm und ein BalkenDiagramm. Alle Klassen sollen in der MIDlet Klasse liegen.

Da diese beiden Klassen einiges gemeinsam haben, wie die Längen und Positionen der Achsen usw., dachte ich, es wäre gut eine Klasse Diagramm zu erstellen, in der alle Gemeinsamkeiten schon berechnet werden. 

Von der Klasse Diagramm sollen dann die beiden neuen Klassen xyDiagramm und BalkenDiagramm erben. 

Wie mache ich das am besten? Ich krieg das einfach nicht hin

Bis jetzt habe ich die  Diagramm-Klassen erstellt:
public class Diagramm extends Canvas

public class xyDiagramm extends Diagramm
und
public class BalkenDiagramm extends Diagramm

Jede der abgeleiteten Klassen hat eine eigene paint Methode.

Kann mir mal jemand bitte einen Pseudocode geben, wie man das genau macht?


----------



## DaNew (11. Mai 2010)

Damit es verständlicher wird, was ich brauche, hier mal Code:


```
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class DiagrammMIDlet extends MIDlet implements CommandListener
{
    private Display		display;
	private Diagramm	Diag;
	private BalkenDiagramm	balkDiag;
	private XYDiagramm	xyDiag;
	
	//Diagramm balkDiag	= new BalkenDiagramm(this); ???
	//Diagramm xyDiag	= new XYDiagramm(this);		???


	public DiagrammMIDlet()
	{
		display		= Display.getDisplay(this);
//		balkDiag	= BalkenDiagramm(this);
//		xyDiag		= XYDiagramm(this);

//		Diag = new Diagramm(this);
//		Diag.addCommand(cmdZurÃ¼ck);
//		Diag.setCommandListener(this);
		balkDiag = new BalkenDiagramm(this);
		balkDiag.addCommand(cmdZurÃ¼ck);
		balkDiag.setCommandListener(this);

		xyDiag = new BalkenDiagramm(this);
		xyDiag.addCommand(cmdZurÃ¼ck);
		xyDiag.setCommandListener(this);

	}

	public void commandAction(Command c, Displayable d){}
	
	public void startApp()	{}
    public void pauseApp() {}
    public void destroyApp(boolean unconditional) {}
	public void exitMIDlet()
	{
		destroyApp(false);
		notifyDestroyed();
	}
}

class BalkenDiagramm extends Diagramm
{
	private DiagrammMIDlet midlet;

	public BalkenDiagramm(DiagrammMIDlet midlet)
	{//*<- hier bekomme ich von NetBeans folgende Meldung, die ich nicht verstehe:
	//constructor Diagramm in class Diagramm cannot be applied to given types
	//required: DiagrammMidlet
	//found:	no arguments
//		super(true);
		this.midlet = midlet;
	}
	protected void paint(Graphics g)
	{
		//zeichne das Balkendiagramm
	}// Ende von protected void paint(Graphics g)

}

class XYDiagramm extends Diagramm
{
	private DiagrammMIDlet midlet;

	public xyDiagramm(DiagrammMIDlet midlet)
	{
//		super(true);
		this.midlet = midlet;
	}
	protected void paint(Graphics g)
	{
		//zeichne das xy-Diagramm
	}// Ende von protected void paint(Graphics g)

}


class Diagramm extends Canvas //implements CommandListener
{
	private DiagrammMIDlet midlet;
	Font font;
	// Variablen, die alle Diagramme brauchen
	public Diagramm(DiagrammMIDlet midlet)
	{
		this.midlet = midlet;
		// Initialisierungen, die alle Diagramme brauchen
	}
	protected void paint(Graphics g)
	{
		// leer, da die abgeleiteten Klassen eigene paint-Methoden haben
	}// Ende von protected void paint(Graphics g)

}
```


----------



## SlaterB (11. Mai 2010)

wenn der einzige Diagramm-Konstruktor 
Diagramm(DiagrammMIDlet midlet)
lautet,
dann kannst du in den Subklasse doch nicht
super(true);
schreiben oder gar nix = super(), 
sondern musst das midlet an super übergeben, die Subklassen müssen das dann auch nicht alle selber speichern

was ist ansonsten eigentlich das Problem?


----------

