Vererbung 2-fach-Vererbung

  • Themenstarter Themenstarter Katharsas
  • Beginndatum Beginndatum
K

Katharsas

Gast
Mein Problem:

Ich habe eine abstrakte Klasse "CObject", eine Klasse "CRObject extends CObject" und eine Klasse "CRSObject extends CRObject".
Die ersten 2 Klassen lassen sich compilieren, aber bei CRSObject bekomme ich in Zeile 17 den BlueJ-Comilerfehler:
"cannot find symbol - constructor CRObject()"

Irgendwas bei den Konstruktoren muss ich falsch gemacht haben:

Klasse CObject:
Java:
import javax.swing.*;
import javax.imageio.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;

/**
 * Abstrakte Klasse, Objekte dieser Klasse können gepaintet werden.
 * Alle gepainteten Objekte des Spiels leiten sich von dieser Klasse ab.
 * 
 * @author Jan Mothes, David Bauske, Max Patenfelder
 */
abstract class CObject
{
    public vector2 m_v2Pos;
    public vector2 m_v2Size;

    public BufferedImage m_gfx;
    
    
    public void CObject(String sFileName, vector2 v2Pos, vector2 v2Size)
    {
        m_v2Pos = v2Pos;
        m_v2Size = v2Size;
        try
        {
            m_gfx = ImageIO.read(new File(sFileName));
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
}

Klasse CRObject:
Java:
import java.util.LinkedList;
import java.awt.image.*;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import static java.lang.Math.*;
import java.awt.*;

/**
 * Rotating Object - Erweitertes CObject, das sich drehen kann.
 * 
 * @author Jan Mothes
 */
public class CRObject extends CObject
{
    public vector2 m_v2Rot;
    public double m_dAngle;
    
    CRObject(String sFileName, vector2 v2Pos, vector2 v2Size, vector2 v2Rot)
    {
        super.CObject(sFileName, v2Pos, v2Size);
        m_v2Rot = v2Rot;
    }
}

Klasse CRSObject:
Java:
import java.util.LinkedList;

/**
 * Rotating and Shooting Object - Erweitertes CRObject, das schießen kann.
 * 
 * @author Jan Mothes
 */
public class CRSObject extends CRObject
{
    //Schussliste und Schusseigenschaften
    private String m_ShotFileName;
    private vector2 m_ShotSize;
    private double m_ShotSpeed;//neu erstellter Shot, wird bei Aufrufen der movePlayer() und rotatePlayer() - Funktionen am Player ausgerichtet und ind die Shot-Liste übertragen (Puffer-Schuss)
    private char m_NewShotPos;//Bestimmt, von welchem Geschütz der Puffer-Shot abgeschossen wird;
    
    CRSObject(String sFileName, vector2 v2Pos, vector2 v2Size, vector2 v2Rot, String shotFileName, vector2 shotSize, double shotSpeed)
    {
        super.CRObject(sFileName, v2Pos, v2Size, v2Rot);
        m_ShotFileName = shotFileName;
        m_ShotSize = shotSize;
        m_ShotSpeed =  shotSpeed;
    }
}

Damit sich das ganze kompilieren lässt, hier noch die Klasse "vector2":
Java:
/**
 * Stellt einen 2-dimensionalen Vektor mit den Werten x=x1 und y=x2 dar.
 * 
 * @author David Bauske, Jan Mothes
 */
class vector2
{
    public double x;
    public double y;
    
    /**
     * Konstruktor
     */
    public vector2(double XPos, double YPos)
    {   
        x = XPos;
        y = YPos;
    }
}

Hat jemand eine Idee, woran das liegen könnte?
 
schau dir den Aufruf eines super-Konstruktors in einem Lehrbuch oder in irgendeinem Beispiel dieser Welt an, fällt dir nichts auf?
JAVA: 7.1.4 Konstruktoren und Vererbung

public void CObject(..) in CObject ist übrigens eine (schlecht großgeschriebene) Methode, kein Konstruktor,
es gibt konkrete Sytaxen zur Definition von Konstruktoren und zum Aufruf von super-Konstruktoren, an die muss man sich nur halten
 
schau dir den Aufruf eines super-Konstruktors in einem Lehrbuch oder in irgendeinem Beispiel dieser Welt an, fällt dir nichts auf?
JAVA: 7.1.4 Konstruktoren und Vererbung
Ähh nein, fällt mir nicht auf...
Ich hab doch einen Konstruktor in CRObject, der durch die .super-Anweisung in CRSObject aufgerufen werden müsste, oder nicht?

public void CObject(..) in CObject ist übrigens eine (schlecht großgeschriebene) Methode, kein Konstruktor,
es gibt konkrete Sytaxen zur Definition von Konstruktoren und zum Aufruf von super-Konstruktoren, an die muss man sich nur halten
Stimmt, hab das korrigiert, soll ein Konstruktor sein, und jetzt versteh ich gar nix mehr...alle Klassen, die CObject erben (hab noch ein paar mehr) zeigen jetzt den selben Compiler-error. Hä? Hilfe!

Danke für die Antwort, aber könntest du das vlt. noch mal erläutern? Ich steh irgendwie aufm Schlauch...
 

Zurück
Oben