Ajouter un commentaire

nasix
Re: Pourquoi ne peut-on pas hériter du constructeur ?

Ce n'est jamais grave, j'aime la philosophie objet, je te jure. Et des fois je prends mon café et je me pose des questions assez bizarres ? tu peux prendre mon contact privé et on mène des discussions à chaque fois que tu le souhaite.

Bon, pour ta question, si je comprends bien, tu veux dire, pourquoi le constructeur d'une classe fille B n'appelle-t-il pas automatiquement un constructeur de sa classe mère A, sans faire intervenir le développeur ? si c'est bien ça ta question, alors j'affirme que chaque constructeur appelle un constructeur de sa classe mère, sauf les constructeurs de la classe Object pour la simple raison que cette dernière n'a pas de classe mère.

Si tu précise quel constructeur de la classe mère appeler, via super(), super(i), super("chaine") alors OK. Sinon le constructeur de la classe fille appelle automatiquement et obligatoirement le constructeur sans argument de la classe mère. Dans ce cas tu as deux situations, la première est celle où tu as bien un constructeur sans argument dans la classe mère, auquel cas il sera appelé et la deuxième où tu n'as pas ce constructeur, auquel cas tu as une erreur de compilation parce que tu appelle implicitement un constructeur qui n'existe pas.

Donc il est à retenir que le constructeur appelé implicitement est celui par défaut (sans argument), voici donc des exemples concrets dans ce sens.

Exemple 1:
public class A {}

est équivalente à :

public class A {
	public A() {
	}
}

et est équivalente aussi à :

public class A {
	public A() {
		super();
	}
}

Exemple 2:

public class A {
	public A(int i) {
	}
}

est équivalente à :

public class A {
	public A(int i) {
                super();
	}
}

Si on considère maintenant :

class B extends A{
}

B est équivalente à :

class B extends A{
	B(){
	}
}

et aussi à :

class B extends A{
	B(){
            super();
	}
}

Par contre le constructeur super() sans arguments n'existe pas dans A, raison pour laquelle B présente une erreur de compilation, la seule façon pour résoudre ce problème est :

class B extends A{
	B(){
		super(1);  // Le 1 est juste un exemple d'entier
	}
}

Voilà, j'espère que je me suis bien expliqué, et que c'est plus clair maintenant, sinon, j'attends tes observations.

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
  CCC  Y   Y  RRRR   N   N  V     V 
C Y Y R R NN N V V
C Y RRRR N N N V V
C Y R R N NN V V
CCC Y R RR N N V