tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
2033
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    kittie kittie ist offline Grünschnabel
    Registriert seit
    Apr 2004
    Beiträge
    3
    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
     

  2. #2
    Avatar von Ein_Freund
    Ein_Freund Ein_Freund ist offline Mitglied Brokat
    Registriert seit
    Apr 2004
    Ort
    Essen
    Beiträge
    272
    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.
     

  3. #3
    kittie kittie ist offline Grünschnabel
    Registriert seit
    Apr 2004
    Beiträge
    3
    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()
    {

    }


    }
     

  4. #4
    Avatar von Ein_Freund
    Ein_Freund Ein_Freund ist offline Mitglied Brokat
    Registriert seit
    Apr 2004
    Ort
    Essen
    Beiträge
    272
    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.
     

  5. #5
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.805
    Blog-Einträge
    5
    Java ist zwar nicht grad meine Domäne, aber so weit ich weiß gibt es in Java keine Mehrfachvererbung in dem Sinne (wie beispielsweise in C++). Eine Klasse kann nur immer von einer übergeordneten Klasse vererbt werden. Du könntest höchstens mit Interfaces arbeiten.

    Siehe auch hier:
    http://www.fh-wedel.de/~si/vorlesung...vererbung.html
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  6. #6
    Avatar von Ein_Freund
    Ein_Freund Ein_Freund ist offline Mitglied Brokat
    Registriert seit
    Apr 2004
    Ort
    Essen
    Beiträge
    272
    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...
     

  7. #7
    kittie kittie ist offline Grünschnabel
    Registriert seit
    Apr 2004
    Beiträge
    3
    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
     

  8. #8
    Registriert seit
    Apr 2004
    Ort
    Ruhrgebiet
    Beiträge
    1.582
    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...
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 08.07.10, 15:05
  2. Antworten: 4
    Letzter Beitrag: 21.07.09, 20:58
  3. Eigene Klassen im JDK...
    Von Jellysheep im Forum Java
    Antworten: 6
    Letzter Beitrag: 26.02.09, 20:32
  4. Antworten: 2
    Letzter Beitrag: 25.11.04, 15:46
  5. ASP.net - Eigene Klassen definieren
    Von Private im Forum .NET Archiv
    Antworten: 10
    Letzter Beitrag: 02.02.04, 22:48