Mehrfachvererbung/eigene Klassen

kittie

Grünschnabel
Hi,
ich habe folgendes Problem:

Ich habe eine eigene Klasse "KMaske0" geschrieben,die aus "Component" erbt.
In der KMaske0 stehen Konstruktoren,Methoden,erzeugte Objekte.,...
Weiterhin hab ich ne "KMaske1" erstellt,die aus "KMaske0" erbt.
In der "KMaske1" stehen mehrere Methoden zum Sortieren und Visualisieren des Sortiervorgangs.
Nun soll ich eine weitere Klasse"Sortierverfahren" erstellen, die aus "KMaske1" erbt. Als Fehler bekomme ich angezeigt,dass in "KMaske1" keine Konstruktoren vorhanden sind....... Und nun?
Wie bekomme ich die Aufgabe erfüllt,dass "Sortierverfahren" aus "KMaske1" erbt?

Danke schonmal =)

steff / kittie
 
Also ohne den Quellcode zu sehen, ist das schwierig. Ich müsste zum Beispiel wissen, an welcher Stelle der Fehler auftritt?

Poste doch einfach mal den Quellcode von 'KMaske1' und 'Sortierverfahren'.

Oder schick's mir per PN.
 
also Quellcode von "Sortierverfahren":

import java.awt.*;
import java.applet.Applet.*;

class Sortierverfahren extends KMaske1
{
private Applet app;
protected Choice= new Choice();
Choice auswahl;
Sortierverfahren(Applet a,String ue)
{
super(a,ue,"Visualisierung von Sortierverfahren");
}

public void starte()
{
auswahl.add("BubbleSort");
auswahl.add("austauschSort");
protected void starten()
{
startKnopf.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
switch(auswahl.getSelectedIndex())
{
// da fehlen jetz noch die methoden......
}


}
}
}

Also diese Klasse ist noch nicht vollständig..Aber mein Hauptproblem liegt darin,eine Mehrfachvererbung hinzukriegen.

KMaske1 ist:

import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;

class KMaske1 extends KMaske0
{
private Applet app;
protected int breiteC = 350, hoeheC = 350;
protected Color hintergrund = Color.black;
protected Color vordergrund = Color.red;
protected Canvas malflaeche = new Canvas();
protected int anzahl = 50;
protected Button generierTaste = new Button("Generieren");
protected Button darstellTaste = new Button("Darstellen");

KMaske1 (Applet a,String ue)
{
super( a,ue,"Anzahl");
}

public void starte()
{
listenFelder = 12;
eingabe1.setText(""+anzahl);
pSued.add(generierTaste);
pSued.add(darstellTaste);
super.starte();
malflaeche.setBackground(hintergrund);
malflaeche.setForeground(vordergrund);
malflaeche.setSize(breiteC, hoeheC);
pMitte.add(malflaeche);

generierTaste.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
generieren();
}
});

darstellTaste.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
darstellen();
}
});}


protected void loeschen()
{
super.loeschen(); //Löschen der Liste
Graphics g = malflaeche.getGraphics(); //Löschen der Malfläche durch Übermalen
g.setColor(hintergrund); // mit der Hintergrundfarbe
g.fillRect(0,0, malflaeche.getSize().width, malflaeche.getSize().height);
g.dispose(); //Freigabe der von g belegten Ressourcen
}
protected void iFuegeAn(int i)
{
super.iSchreibe(i); //Erweitern der Liste
//plott(liste.getItemCount() - 1,i,vordergrund); //Graph.Pendant
}

protected int iLiesListe(int pos) //aus der Liste lesen
{
return Integer.valueOf(liste.getItem(pos)).intValue();
}

protected void plott(int i,int d,Color c) //eine Kreisscheibe in der angg.Farbe
{ //auf Malfläche zeichnen
Graphics g= malflaeche.getGraphics();
g.setColor(c);
g.fillOval(i*5,(int)(hoeheC - 5 - 5*d),5,5); //Mittelpunkt,Achsen(d.Punktes)
g.dispose();
try{
Thread.sleep(50); } //50 Millisekunden Pause
catch (InterruptedException e){ } //Ausnahmebehandlung
}
protected void iErsetze(int i,int k)
{
int vorher;
vorher=iLiesListe(i);
liste.replaceItem(String.valueOf(k),i);
plott(i,vorher,hintergrund); //vorhergehende darstellung wird übermalt
plott(i,k,vordergrund); //neuer Punkt mir Vordergrund
}
protected void iTausche(int i,int k)
{
int di,dk;
di=iLiesListe(i);dk=iLiesListe(k);
iErsetze(i,dk);
iErsetze(k,di);
}
protected void generieren()
{
anzahl=iLies(eingabe1);
super.loeschen(); // "loeschen" =Löschmethode aus KMaske0
for(int i=0;i<anzahl;i++) iFuegeAn(i);
for(int i=0;i<anzahl;i++)
{
int z= (int) (Math.random()*(anzahl-i));
iTausche(z,anzahl - i -1);
}
}

public void darstellen()
{
anzahl=iLies(eingabe1);
for(int i=0;i<anzahl;i++) plott (i,iLiesListe(i),vordergrund);

}

protected void starten()
{

}


}
 
Ich kann in der Klasse Sortierverfahren einen Konstruktoraufruf mit 3 Argumenten finden, aber in Klasse KMaske1 nur einen Konstruktor mit 2 Argumenten in der Signatur.


Sortierverfahren(Applet a,String ue)
{
super(a,ue,"Visualisierung von Sortierverfahren"); // Hier werden drei Argumente übergeben
}

KMaske1 (Applet a,String ue) //Erwartet nur zwei Argumente
{
super( a,ue,"Anzahl");
}

Probier' mal, ob es daran liegt.
 
Du hast natürlich recht, Matthias. Eine Mehrfachvererbung im Sinne von C++ gibt es bei Java nicht. Das Schlüsselwort 'SUPER' spricht nur die vererbende Klasse an. Und das macht auch Sinn. Anderenfalls würde jede Klasse, die den SUPER-Konstruktor aufruft, die Klasse 'object' ansprechen...
 
Hm..... also am Konstruktor liegt es anscheinend nicht,die Konstruktoren sind übrigens in KMaske0 definiert.... (Sortierverfahren erbt aus KMaske1 erbt aus KMaske0)
Wie bekomme ich das hin, dass Sortierverfahren ein Interface ist. bzw wie lautet die Syntax für Interfaces?(Sorry.... überhaupt keine Ahnung von..)

P.s. Ich bekomme folgenden Fehler, wenn ich im Konstruktor zwei Werte übergeben lasse: Sortierverfahren.java:20:'class' or 'interface' expected
 
Original geschrieben von kittie
Hm..... also am Konstruktor liegt es anscheinend nicht,die Konstruktoren sind übrigens in KMaske0 definiert.... (Sortierverfahren erbt aus KMaske1 erbt aus KMaske0)

Jein. Wenn in KMaske0 ein Konstruktor mit 3 Parametern vorhanden ist, muss in den von KMaske0 abgeleiteten Klassen ebenfalls ein Konstruktor mit 3 Parametern vorhanden sein. Notfalls einfach
KMaske1(p1, p2, p3)
{
super(p1, p2, p3);
}

und gut is.

Wie bekomme ich das hin, dass Sortierverfahren ein Interface ist. bzw wie lautet die Syntax für Interfaces?(Sorry.... überhaupt keine Ahnung von..)

Schnapp Dir ein Buch dazu.
Nur kurz: Ein Interface ist eine eigene Klasse. In ihr werden lediglich Methoden definiert (nicht implementiert!), die alle Klassen implementieren müssen, die dieses Interface benutzen wollen. Also wenn Du ein Interface MyInterface angelegt hast:

public interface MyInterface
{
public void blaBlubChanged(BlaBlubEvent evt);
}

Dann kann ich in meiner Klasse das Interface so einbauen:
class MyClass implements MyInterface
{
...
public void blaBlubChanged(BlaBlubEvent evt)
{ // hier tue ich was ich für richtig halte, z.B.
System.out.println("Hallo Welt");
}
}

Meistens werden Interfaces als Listener benutzt, aber das jetzt hier zu erklären ginge echt zu weit...
 

Neue Beiträge

Zurück