OVH Cloud OVH Cloud

[debutant] héritage de constructeurs

4 réponses
Avatar
julien
Bonjour
J'ai une classe C qui utilise une classe B, la classe B hérite de la
classe A:
public class A {
...
public A()
{
....
}

public A(int w, int x, int y, int z)
{
....
}
....
}

public class B extends A {
...
// pas de constructeur
}

public class C {
private B b;

class void init()
{
b = new B(0,0,10,10);
}
...
}

Et j'ai l'erreur suivante en compilat C:
C.java:10: cannot resolve symbol
symbol : constructor B (int,int,int,int)
location: class B
b = new B(0,0,10,10);
^

Je pensais que B n'ayant pas de constructeur, le constructeur de son
parent 1 serait utilisé. J'ai mal compris ou l'erreur est ailleurs?

Merci
Julien

4 réponses

Avatar
Vincent Cantin
Une classe n'a que les constructeurs qu'elle declare + le constructeur
implicite qui n'a pas d'arguments.
C'est la classe B qui voient comment elle doit se construire, et non pas la
classe A qui doit le faire pour elle.
La classe B peut cependant utiliser les constructeurs de la classe A pour
initialiser les donnees heritees de la classe A.
Si tu veux avoir tous les constructeurs de la classe A dans la classe B, il
faut que tu les declares dans la classe B et que tu utilises lemot clef
"super" pour faire reference au constructeurs de A a partir de B.


"julien" ???
news:413fe6ec$0$20460$ ???...
Bonjour
J'ai une classe C qui utilise une classe B, la classe B hérite de la
classe A:
public class A {
...
public A()
{
....
}

public A(int w, int x, int y, int z)
{
....
}
....
}

public class B extends A {
...
// pas de constructeur
}

public class C {
private B b;

class void init()
{
b = new B(0,0,10,10);
}
...
}

Et j'ai l'erreur suivante en compilat C:
C.java:10: cannot resolve symbol
symbol : constructor B (int,int,int,int)
location: class B
b = new B(0,0,10,10);
^

Je pensais que B n'ayant pas de constructeur, le constructeur de son
parent 1 serait utilisé. J'ai mal compris ou l'erreur est ailleurs?

Merci
Julien


Avatar
Xavier
Une classe n'a que les constructeurs qu'elle declare + le constructeur
implicite qui n'a pas d'arguments.


Non. Si une classe ne déclare pas de constructeur, elle a celui par défaut,
sinon, elle n'a que les constructeur qu'elle déclare et pas celui par
défaut, qu'il faut ajouter explicitement si nécessaire.

Xavier

Avatar
Vincent Cantin
Une classe n'a que les constructeurs qu'elle declare + le constructeur
implicite qui n'a pas d'arguments.


Non. Si une classe ne déclare pas de constructeur, elle a celui par déf
aut,

sinon, elle n'a que les constructeur qu'elle déclare et pas celui par
défaut, qu'il faut ajouter explicitement si nécessaire.

Xavier


Tout a fait juste, merci pour la precision.

Vincent


Avatar
julien
Vincent Cantin wrote:
Une classe n'a que les constructeurs qu'elle declare + le constructeur
implicite qui n'a pas d'arguments.
C'est la classe B qui voient comment elle doit se construire, et non pas la
classe A qui doit le faire pour elle.
La classe B peut cependant utiliser les constructeurs de la classe A pour
initialiser les donnees heritees de la classe A.
Si tu veux avoir tous les constructeurs de la classe A dans la classe B, il
faut que tu les declares dans la classe B et que tu utilises lemot clef
"super" pour faire reference au constructeurs de A a partir de B.


Merci pour ces précisions

Julien