6

エンティティを拡張するクラスPlayerがあります。

プレーヤー:

public class Player extends Entity {
    public Player(char initIcon, int initX, int initY) {
        //empty constructor
    }
...

実在物:

public Entity(char initIcon, int initX, int initY) {
        icon = initIcon;
        x = initX;
        y = initY;
    }
...

これはあなたが期待することとほぼ同じですが、コンパイル時に次のようなエラーが発生します

Player.java:2: error: constructor Entity in class Entity cannot be applied to the given types:
    public Player(char initIcon, int initX, int initY)
required: char,int,int
found: no arguments
reason: actual and formal argument lists differ in length

しかし、それは明らかに必要な議論を持っています。何が起きてる?ありがとう!

4

5 に答える 5

14

スーパークラスを初期化するには、そのコンストラクターを次のように呼び出します。super

public Player(char initIcon, int initX, int initY) {
    super(initIcon, initX, initY);
}
于 2012-12-19T15:24:07.910 に答える
7

スーパークラスコンストラクターには3つの引数があり、空のコンストラクターがないようです。したがって、サブクラスコンストラクターは、値を渡すスーパークラスコンストラクターを明示的に呼び出す必要があります。

public class Player extends Entity {
    public Player(char initIcon, int initX, int initY) {
        //empty constructor
        super(initIcon,initX,initY);
    }
...
于 2012-12-19T15:23:59.050 に答える
2

拡張クラスのコンストラクターから明示的に基本クラスのコンストラクターを呼び出す必要があります。あなたはそのようにします:

public class Player extends Entity {
    public Player(char initIcon, int initX, int initY) {
        super(initIcon, initX, initY);
        // rest of player-specific constructor
    }
于 2012-12-19T15:24:53.587 に答える
2

スーパーコンストラクターへの明示的な呼び出しはないため(他の回答または以下に示すように)、VMは暗黙の0引数コンストラクターを使用します...しかし、このコンストラクターは存在しません。したがって、有効なスーパーコンストラクターを明示的に呼び出す必要があります。

 public class Player extends Entity {
    public Player(char initIcon, int initX, int initY) {
        super(initIcon,initX,initY);
    }
于 2012-12-19T15:51:37.803 に答える
0

子クラスが親クラスを継承する場合、親クラスのデフォルトコンストラクターがデフォルトで呼び出されます。上記の場合、Parentクラスでパラメトリックコンストラクターを定義しているため、デフォルトはJVMによって提供されず、子クラスはそこに存在しない親のデフォルトコンストラクターを呼び出しています。Parentクラスでデフォルトのコンストラクターを指定するか、superを使用して親のParametricコンストラクターを呼び出します。

public class Player extends Entity {
public Player()
{}
public Player(char initIcon, int initX, int initY) {
    //empty constructor
}

また

public Player
(char initIcon, int initX, int initY) {
super(initIcon, initX, initY);
}
于 2012-12-19T16:06:11.443 に答える