2012-12-19 15 views
5

Ho un giocatore di classe che estende Entity:Gli argomenti effettivi di Java non corrispondono agli argomenti formali, ma lo fanno?

giocatore:

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

Entity:

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

Questo è più o meno quello che ci si aspetterebbe, ma sulla compilazione Ottengo un errore che legge

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 

Ma chiaramente ha gli argomenti richiesti. Cosa sta succedendo qui? Grazie!

+7

Perché non fai 'super (chat, int, int)'? – GGrec

risposta

13

è necessario inizializzare superclasse da chiamare il suo costruttore con super

public Player(char initIcon, int initX, int initY) { 
    super(initIcon, initX, initY); 
} 
7

Il costruttore di super classe ha 3 argomenti e non sembra avere un costruttore vuoto. Pertanto, il costruttore della sottoclasse dovrebbe effettuare una chiamata esplicita al costruttore super class passando i valori.

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

, è necessario chiamare il costruttore della classe base esplicitamente dal costruttore della classe che estende. Lo fate così:

public class Player extends Entity { 
    public Player(char initIcon, int initX, int initY) { 
     super(initIcon, initX, initY); 
     // rest of player-specific constructor 
    } 
2

Non v'è alcuna chiamata esplicita a un costruttore super (come mostrato in altre risposte o sotto) in modo che il VM userà un implicito costruttore 0-arg ... ma questo costruttore fa non esiste. Quindi bisogna fare una chiamata esplicita a un costruttore eccellente valida:

public class Player extends Entity { 
    public Player(char initIcon, int initX, int initY) { 
     super(initIcon,initX,initY); 
    } 
0

Quando la classe bambino eredita la classe padre poi di default costruttore della classe genitore è chiamato per impostazione predefinita. Nel caso precedente è stato definito il costruttore parametrico nella classe Parent in modo che il valore predefinito non venga fornito da JVM e la classe figlio stia chiamando il costruttore predefinito genitore che non esiste. Specificare il costruttore predefinito nella classe Parent o chiamare il costruttore Parametric del genitore usando super.

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

O

public Player 
(char initIcon, int initX, int initY) { 
super(initIcon, initX, initY); 
} 
Problemi correlati