9

これは私の基本クラスです:

abstract public class CPU extends GameObject {
    protected float shiftX;
    protected float shiftY;

    public CPU(float x, float y) {
        super(x, y);
    }

そして、これがそのサブクラスの 1 つです。

public class Beam extends CPU {
    public Beam(float x, float y, float shiftX, float shiftY, int beamMode) {
        try {
            image = ImageIO.read(new File("/home/tab/Pictures/Beam"+beamMode+".gif"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        this.x = x;
        this.y = y;
        this.shiftX = shiftX;
        this.shiftY = shiftY;
    }

新しいコンストラクターが強調表示され、次のように表示されます。

Constructor CPU in class CPU cannot be applied to given types:
required: float, float
found: no arguments

それを解決する方法は?

4

4 に答える 4

17

エラーがあなたに伝えようとしているので、あなたはあなたの基本クラスのコンストラクターにパラメーターを渡す必要があります。

追加super(x, y);

于 2013-01-17T17:21:02.677 に答える
4

最終オブジェクトは、コンストラクターの1つを使用してスーパークラスを初期化する必要があります。superデフォルト(パラメーターなし)コンストラクターがある場合、コンパイラーはそれを暗黙的に呼び出します。それ以外の場合、サブクラスコンストラクターは、コンストラクターの最初の行として使用して呼び出す必要があります。

あなたの場合、それは次のようになります。

public Beam(float x, float y, float shiftX, float shiftY, int beamMode) { 
  super(x, y)

this.xそして、以降の割り当てを削除しthis.yます。

また、それらを作成しないでくださいprotected。デバッグが困難になります。代わりに追加gettersし、絶対に必要な場合setters

于 2013-01-17T17:24:46.233 に答える
2

私はあなたが書くべきだと思う

protected float shiftX;
protected float shiftY;

public CPU(float x, float y, float shiftX, float shiftY) {
    super(x, y);
    this.shiftX = shiftX;
    this.shiftY = shiftY
}

public Beam(float x, float y, float shiftX, float shiftY, int beamMode) {
    super(x,y,shiftX,shiftY);
    try {
        image = ImageIO.read(new File("/home/tab/Pictures/Beam"+beamMode+".gif"));
    } catch (Exception e) {
        throw new AssertionError(e);
    }
}
于 2013-01-17T17:23:44.347 に答える