Je veux appeler le constructeur ConcreteSubject dans la classe ConcreteSubject à main. J'essaie de créer un tableau avec un constructeur qui accepte en tant que paramètres pour initialiser le tableau. Je ne suis donc pas sûr de ce qui manque / ne va pas.
public class ConcreteSubject extends AbstractSubject { public int arySize; private AbstractSpy[] spies; public ConcreteSubject(int a) { arySize = a; spies = new AbstractSpy[a]; } @Override void notifySpies() { } @Override public void addSpy(AbstractSpy spy) { } } public class TestSpies { public static void main(String[] args) { // this is where there is something wrong as it whats another constructor created. ConcreteSubject cs = new ConcreteSubject(); AbstractSpy spy = new ConcreteSpy(); AbstractSpy[] spies = new AbstractSpy[10]; cs.addSpy(spy); } }
5 Réponses :
La classe ConcreteSubject n'a pas de constructeur par défaut. Il n'y a qu'un seul constructeur avec le paramètre int:
int x = ... new ConcreteSubject(x);
Et vous devez passer le paramètre int
à l'appel de ce constructeur.
Ainsi, l'appel devrait ressembler à:
public ConcreteSubject(int a) { // ... }
Vous avez défini votre constructeur comme ci-dessous, avec un paramètre int:
ConcreteSubject cs = new ConcreteSubject(5);
Ce qui signifie que lorsque vous l'appelez, vous devez passer un paramètre int, par exemple:
public ConcreteSubject(int a) { ⦠}
Il existe deux façons de résoudre ce problème:
A. Créez un constructeur non paramétré dans la classe ConcreteSubject
public ConcreteSubject() { //Initialize the variables with default values }
B. Ou, utilisez ConcreteSubject cs = new ConcreteSubject (10);
au lieu de ConcreteSubject cs = new ConcreteSubject ();
dans la méthode main
. P >
lorsque vous créez un constructeur pour votre classe, java ne vous donne pas le constructeur par défaut. et vous ae initialiser votre objet avec ConcreteSubject cs = new ConcreteSubject ();
il y a 2 solutions pour initialiser le tableau:
créer un constructeur par défaut dans votre classe ConcreteSubject
public ConcreteSubject () {
cs.arySize= x //whatever value you want` cs.spies = new new AbstractSpy[a];
puis intiaise array `
}
ou vous devez initialiser votre objet comme ci-dessous:
ConcreteSubject cs = new ConcreteSubject (x); // quelle que soit la valeur que vous voulez
Si vous ne créez pas de constructeur, java créera automatiquement un constructeur par défaut. Mais si vous en créez un qui n'est pas par défaut, comme celui que vous avez créé avec le paramètre int, alors vous devrez créer un constructeur par défaut par vous-même (si vous en avez besoin) car java n'en fera pas un par défaut dans ce cas.
Vous avez donné à votre classe un constructeur qui prend un
int a
comme paramètre et pour cela, vous devez également appeler le constructeur avec ce paramètre.