constructeur de la sous-classe en Java
Lors de la compilation de ce programme, j'obtiens l'erreur-
class Person {
Person(int a) { }
}
class Employee extends Person {
Employee(int b) { }
}
public class A1{
public static void main(String[] args){ }
}
D'erreur, Impossible de trouver Constructeur Personne().
Pourquoi la définition de Personne() est-elle nécessaire?
À l'aide d'un IDE comme Eclipse vous donnera immédiatement le soupçon et un raccourci pour la correction.
OriginalL'auteur onlinenaman | 2012-03-06
Vous devez vous connecter pour publier un commentaire.
Lors de la création d'un
Employee
vous êtes en train de créer unPerson
en même temps. Assurez-vous que lePerson
est correctement construit, le compilateur ajoute un appel implicite àsuper()
dans leEmployee
constructeur:Depuis
Person
ne possède pas de constructeur sans argument d'échec.Vous le résoudre par
l'ajout d'un appel explicite à super, comme ceci:
ou par l'ajout d'un non-arg constructeur de
Person
:Généralement un non-arg constructeur est également ajouté implicitement par le compilateur. Comme Binyamin Sharet points dans les commentaires cependant, c'est seulement le cas si aucun constructeur n'est spécifié. Dans votre cas, vous ont spécifié une Personne constructeur, donc pas de constructeur implicite est créé.
bon point. Réponse de mise à jour.
OriginalL'auteur aioobe
Le constructeur de
Employee
ne sais pas comment construire la super-classe,Person
. Sans vous, indiquez explicitement, il sera par défaut à essayer le no-args constructeur de la super-classe, qui n'existe pas. D'où l'erreur.La solution est:
OriginalL'auteur dty
Java en fait ce code:
Car il n'y a pas de Personne() constructeur d'échec. Au lieu de cela, essayez:
OriginalL'auteur Jim
Java vous offre un constructeur par défaut qui ne prend pas de paramètres. Le constructeur n'a pas de corps, donc il est quelque chose comme ça:
public Person() {}
. Le moment où vous vous définir propre constructeur, votre constructeur(s), prendre la place de celui par défaut, donc dans votre cas,Person(int nm){}
prend la place dePerson() { }
. Votre appel est d'essayer de implicitement appelPerson() { }
et depuis ce constructeur n'existe plus, le code est un échec. Jetez un oeil à cette précédent DONC, la question pour plus d'informations.OriginalL'auteur npinti
La réponse ci-dessus est correcte, certains plus: vous pouvez directement appel à super(int n) pour éviter implicitement l'ajout de super() ici:
PS:Désolé pour mon écriture. L'anglais n'est pas ma langue maternelle.
OriginalL'auteur MikhailSP
Ce n'est pas à 100% de votre problème. Mais c'est aussi lié à java constructeurs. Disons que votre Personne de la classe n'a pas de constructeur par défaut et les paramètres du constructeur ne sont pas de type de données primitif. Ils sont des objets.
Mais Si vous voulez créer une sous-classe avec un constructeur par défaut, voici la solution.
Et de le garder à l'esprit que vous n'êtes pas autorisé à modifier la super-classe.
J'ai créé une autre classe appelée contact.
Puis ici, c'est le code.
Vous devez variable statique de la classe Contact de garder une instance de l'objet pour passer de super constructeur de la classe.
OriginalL'auteur Risith Ravisara