Konstruktor-Aufruf

Endymion

Bekanntes Mitglied
ich habe folgendes problem: ich will diese klasse
Java:
public class ZELLE
{
    // Attribute
    int positionX;
    int positionY;
    boolean istMauer;
    
    // Referenzattribute
    ZELLENSYMBOL zsymbol;
    
    // Konstruktor
    ZELLE ()
    {
        positionX = 0;
        positionY = 0;
        istMauer= false;        
        zsymbol = new ZELLENSYMBOL();
        zsymbol.FuellFarbeSetzen("blau");
        zsymbol.RandFarbeSetzen("schwarz");
        zsymbol.FuellungSichtbarSetzen(false);
        zsymbol.RandSichtbarSetzen(true);
    }
}
mit dieser klasse
Java:
/**
*
*Diese Klasse dient zur Dastellung einer ZELLE. Dabei ist darauf zu achten, dass
*die ZELLENDARSTELLUNG erst sichtbar wird, wenn ihr x- und y-Position übergeben wurden.
*Einmal übergeben, lassen sich die Koordinaten nicht mehr ändern.
*Willst Du z.B. die mit Mausklicks die ZELLE verändern, musst Du sie zuerst an das backend übergeben.
*Nutze dazu die Methode Anmelden().
*
*@author Sebastian Zinkhahn
*/

public class ZELLENSYMBOL extends ZellDarstellungImpl
{
  int positionX = super.positionX;
  int positionY = super.positionY;
  String fuellFarbe = "blau";
  String randFarbe = "schwarz";
  boolean fuellungSichtbar = false;
  boolean randSichtbar = true;
  
  /**
   * Erzeugt eine Zelle mit der angebeneben x- und y-Position im Labyrinth
   * @param xNeu
   * @param yNeu
   */
  public ZELLENSYMBOL(int xNeu, int yNeu)
  {
    super(xNeu, yNeu);
    super.FuellFarbeSetzen(fuellFarbe);
    super.FuellungSichtbarSetzen(fuellungSichtbar);
    super.RandFarbeSetzen(randFarbe);
    super.RandSichtbarSetzen(randSichtbar);
  }

//  /**
//   * Setzt die x- und y-Position der Darstellung.
//   * Diese Methode kann nur einmal(!) benutzt werden.
//   * Danach wirken sich die Änderungen nicht mehr aus.
//   * @see ZellDarstellungImpl#PositionXYSetzen(int, int)
//   */
//  public void PositionXYSetzen(int xNeu, int yNeu)
//  {
//    if(!super.init)
//    {
//      positionX = xNeu;
//      positionY = yNeu;
//    }
//    super.PositionXYSetzen(xNeu, yNeu);
//  }

  
 
  
  /**
   * Ändert die Füllfarbe dieses Symbols
   * @see KruemelDarstellungImpl#FarbeSetzen(java.lang.String)
   */
  public void FuellFarbeSetzen(String farbeNeu)
  {
    fuellFarbe = farbeNeu;
    super.FuellFarbeSetzen(farbeNeu);
  }
  
  /**
   * Ändert die Randfarbe dieses Symbols
   * @see backend.view.DarstellungImpl#RandFarbeSetzen(java.lang.String)
   */
  public void RandFarbeSetzen(String farbeNeu)
  {
    randFarbe = farbeNeu;
    super.RandFarbeSetzen(farbeNeu);
  }
  
  /**
   * Gibt an ob das Symbol ausgefüllt werden soll
   * @see backend.view.DarstellungImpl#FuellungSichtbarSetzen(boolean)
   */
  public void FuellungSichtbarSetzen(boolean b)
  {
    fuellungSichtbar = b;
    super.FuellungSichtbarSetzen(b);
  }
  
  /**
   * Gibt ob der Rand des Symbols gezeichnet werden soll
   * @see backend.view.DarstellungImpl#RandSichtbarSetzen(boolean)
   */
  public void RandSichtbarSetzen(boolean b)
  {
    randSichtbar = b;
    super.RandSichtbarSetzen(b);
  }
}
verknüpfen. wenn ich auf übersetzen gehe, entsteht zwar der pfeil von zelle zu zellensymbol, aber ich bekomme die fehlermeldung "cannot find symbol - constructor ZELLENSYMBOL()". markiert ist dabei zeile 17 bei zelle. kann mir jemand helfen?
 
Zuletzt bearbeitet von einem Moderator:
naja, meiner Frage nach anscheinend nicht 😉
ein ähnliches Beispiel:
Methode [c]public void test(int x);[/c]

wie würdest du die aufrufen?
test();
test(4);
test("hallo");
?

bei Konstruktoren ist es kaum anders, man muss schon drauf achten was an Parametern erlaubt/ nicht erlaubt oder zwingend erforderlich ist
 
ich würde test(4), nehmen, aber das hat doch nichts mit meinem problem zu tun, oder?
bei zeile 17 brauche ich doch nur [objektname] = new [klassenname] (); einzugeben oder?
eigendlich stimmt das doch was ich eingegeben habe...
 
noch deutlicher: nein, der Kostruktor verlangt zwei Parameter, da steht doch

> public ZELLENSYMBOL(int xNeu, int yNeu)
und nicht
> public ZELLENSYMBOL()
 
achso, in der schule haben wir gelernt, dass, falls man zwei klassen verknüpfen will, man da nur [objekt] = new [klasse] (); schreiben muss, ohne etwas in die klammern zu setzen.
 
Das hat ja mit dem Verknüfen der Klassen nichts zu tun... Damit erstellst du nur eine Instanz der Klasse, falls es einen parameterlosen Konstruktor gibt.
 

Zurück
Oben