super() appelle le constructeur parent sans arguments.
Il peut également être utilisé avec des arguments. C'est à dire super(argument1)et il appellera le constructeur qui accepte 1 paramètre du type de argument1(s'il existe).
Il peut également être utilisé pour appeler des méthodes à partir du parent. C'est à diresuper.aMethod()
REMARQUE: dans le premier cas, la classe parent doit avoir un constructeur sans argument qui échouera et qui générera une erreur de compilation.
KNU
Nit: La terminologie parent / enfant n'est pas très bonne pour les hiérarchies de classes. (Un enfant n'est pas un père.)
aioobe
Existe-t-il des restrictions sur les endroits où Super peut être utilisé?
Aaron Franke
2
@VivekChavda, bien sûr, un enfant peut être un parent, tout comme un étudiant peut être un enseignant, etc. Mais je pense que vous comprenez la différence par rapport à Animal -> Dog par exemple. Un chien est nécessairement un animal. Le parent / enfant est généralement a une relation («Un parent a un enfant») tandis qu'un animal / chien est une relation «est une» . Voir aioo.be/2016/06/29/a-child-is-not-always-a-parent.html
aioobe
2
@AaronFranke, "Existe-t-il des restrictions sur l'endroit où Super peut être utilisé?" - Oui, super(...)ne peut être utilisé que comme première instruction dans un constructeur.
aioobe
154
Quelques faits:
super() est utilisé pour appeler le parent immédiat.
super() peut être utilisé avec des membres d'instance, c'est-à-dire des variables d'instance et des méthodes d'instance.
super() peut être utilisé dans un constructeur pour appeler le constructeur de la classe parente.
OK, maintenant implémentons pratiquement ces points de super().
Découvrez la différence entre le programme 1 et 2. Ici, le programme 2 vérifie notre première déclaration super()en Java.
Programme 1
classBase{int a =100;}classSup1extendsBase{int a =200;voidShow(){System.out.println(a);System.out.println(a);}publicstaticvoid main(String[] args){newSup1().Show();}}
Production:
200
200
Maintenant, consultez le programme 2 et essayez de comprendre la principale différence.
Programme 2
classBase{int a =100;}classSup2extendsBase{int a =200;voidShow(){System.out.println(super.a);System.out.println(a);}publicstaticvoid main(String[] args){newSup2().Show();}}
Production:
100
200
Dans le programme 1, la sortie était uniquement de la classe dérivée. Il n'a pas pu imprimer la variable ni de la classe de base ni de la classe parente. Mais dans le programme 2, nous avons utilisé super()avec variable alors de l'impression de sa sortie, et au lieu d'imprimer la valeur de variable ade la classe dérivée, il a imprimé la valeur de variable ade la classe de base. Cela prouve donc que l' super()on utilise pour appeler le parent immédiat.
OK, vérifiez maintenant la différence entre le programme 3 et le programme 4.
Programme 3
classBase{int a =100;voidShow(){System.out.println(a);}}classSup3extendsBase{int a =200;voidShow(){System.out.println(a);}publicstaticvoidMain(String[] args){newSup3().Show();}}
Production:
200
Ici, la sortie est 200. Lorsque nous avons appelé Show(), la Show()fonction de la classe dérivée a été appelée. Mais que devons-nous faire si nous voulons appeler la Show()fonction de la classe parente? Consultez le programme 4 pour la solution.
Programme 4
classBase{int a =100;voidShow(){System.out.println(a);}}classSup4extendsBase{int a =200;voidShow(){super.Show();System.out.println(a);}publicstaticvoidMain(String[] args){newSup4().Show();}}
Production:
100
200
Ici, nous obtenons deux sorties, 100 et 200. Lorsque la Show()fonction de la classe dérivée est invoquée, elle appelle d'abord la Show()fonction de la classe parente, car à l'intérieur de la Show()fonction de la classe dérivée, nous avons appelé la Show()fonction de la classe parente en mettant le supermot - clé avant le nom de la fonction.
Pourquoi n'avez-vous pas mis en retrait vos exemples de code source? Y a-t-il une raison précise?
erikbwork
NON erikb, je veux connaître l'utilisation de super (). Ci-après seulement je vais
Mohan
Dans ma classe de base, je surcharge le constructeur avec un, deux, ... arguments
Mohan
mais dans ma classe dérivée, j'utilise super () sans aucun argument. alors que se passera-t-il s'il appelle automatiquement un constructeur par défaut d'une classe de base
Mohan
2
super()n'est pas un mot-clé. Il s'agit d'une invocation de constructeur. superest un mot-clé, et # 1 et # 2 n'ont de sens qu'avec cette définition.
Oui. super(...)invoquera le constructeur de la super-classe.
Illustration:
Exemple autonome:
classAnimal{publicAnimal(String arg){System.out.println("Constructing an animal: "+ arg);}}classDogextendsAnimal{publicDog(){super("From Dog constructor");System.out.println("Constructing a dog.");}}publicclassTest{publicstaticvoid main(String[] a){newDog();}}
Tirages:
Constructing an animal:FromDog constructorConstructing a dog.
Dans ma classe de base, je surcharge le constructeur avec un, deux, ... arguments dans ma classe dérivée, j'utilise super () sans aucun argument. alors que se passera-t-il s'il appelle automatiquement un constructeur par défaut d'une classe de base
Mohan
Oui. Si vous l'appelez, super()il invoquera le constructeur de la super-classe qui ne prend aucun argument. De même, il invoquera le constructeur à 1 argument si vous le faites super(arg1), et ainsi de suite.
aioobe
s'il n'y avait pas de constructeur sans argu dans la classe de base, que se passe-t-il si la classe dérivée appelle super ().
Mohan
1
Rien. Il ne compilera pas. Si vous fournissez vous-même un constructeur, le constructeur automatique / par défaut / sans argument ne sera pas généré et super()ne sera donc pas un appel valide.
aioobe
29
Est-ce que super () est utilisé pour appeler le constructeur parent?
Oui.
Veuillez expliquer Super ().
super()est une utilisation spéciale du supermot - clé où vous appelez un constructeur parent sans paramètre. En général, le supermot - clé peut être utilisé pour appeler des méthodes substituées, accéder à des champs masqués ou invoquer le constructeur d'une superclasse.
super()est utilisé pour appeler le constructeur parent, super.myMethod()est utilisé pour appeler une méthode redéfinie.
Sean Patrick Floyd
2
@seanizer ou toute autre méthode de la superclasse (y compris la statique) si sa portée. super n'est qu'une référence à votre classe de base.
atamanroman
3
Je ne pense pas que super () soit utilisé pour appeler des méthodes de classe de base. Vous pouvez cependant utiliser super.method ().
Dheeraj Joshi
@seanizer, @Dheeraj: Merci pour vos commentaires, j'ai adapté ma réponse.
Heinzi
7
L'appel du super constructeur sans arguments n'est qu'une perte d'espace d'écran et de temps de programmation. Le compilateur génère exactement le même code, que vous l'écriviez ou non.
Juste super (); seul appellera le constructeur par défaut, s'il existe de la superclasse d'une classe. Mais vous devez explicitement écrire vous-même le constructeur par défaut. Si vous n'avez pas Java, vous en générerez une sans implémentation, enregistrez super (); , faisant référence à l'objet Superclass universel, et vous ne pouvez pas l'appeler dans une sous-classe.
publicclassAlien{publicAlien(){//Default constructor is written out by user/** Implementation not shown…**/}}publicclassWeirdAlienextendsAlien{publicWeirdAlien(){super();//calls the default constructor in Alien.}}
Je voudrais partager avec les codes ce que j'ai compris.
Le super mot-clé en java est une variable de référence qui est utilisée pour référencer des objets de classe parent. Il est principalement utilisé dans les contextes suivants: -
1. Utilisation de super avec variables:
classVehicle{int maxSpeed =120;}/* sub class Car extending vehicle */classCarextendsVehicle{int maxSpeed =180;void display(){/* print maxSpeed of base class (vehicle) */System.out.println("Maximum Speed: "+super.maxSpeed);}}/* Driver program to test */classTest{publicstaticvoid main(String[] args){Car small =newCar();
small.display();}}
Production:-
MaximumSpeed:120
Utilisation de super avec des méthodes:
/* Base class Person */classPerson{void message(){System.out.println("This is person class");}}/* Subclass Student */classStudentextendsPerson{void message(){System.out.println("This is student class");}// Note that display() is only in Student class void display(){// will invoke or call current class message() method
message();// will invoke or call parent class message() method super.message();}}/* Driver program to test */classTest{publicstaticvoid main(String args[]){Student s =newStudent();// calling display() of Student
s.display();}}
Production:-
This is student classThis is person class
3. Utilisation de super avec les constructeurs:
classPerson{Person(){System.out.println("Person class Constructor");}}/* subclass Student extending the Person class */classStudentextendsPerson{Student(){// invoke or call parent class constructor super();System.out.println("Student class Constructor");}}/* Driver program to test*/classTest{publicstaticvoid main(String[] args){Student s =newStudent();}}
Constructeurs
Dans un constructeur, vous pouvez l'utiliser sans point pour appeler un autre constructeur. superappelle un constructeur dans la superclasse; thisappelle un constructeur dans cette classe:
publicMyClass(int a){this(a,5);// Here, I call another one of this class's constructors.}publicMyClass(int a,int b){super(a, b);// Then, I call one of the superclass's constructors.}
superest utile si la superclasse doit s'initialiser. thisest utile pour vous permettre d'écrire tout le code d'initialisation matérielle une seule fois dans l'un des constructeurs et de l'appeler à partir de tous les autres constructeurs, beaucoup plus faciles à écrire.
Méthodes
Dans n'importe quelle méthode, vous pouvez l'utiliser avec un point pour appeler une autre méthode. super.method()appelle une méthode dans la superclasse; this.method()appelle une méthode de cette classe:
publicString toString(){int hp =this.hitpoints();// Calls the hitpoints method in this class// for this object.String name =super.name();// Calls the name method in the superclass// for this object.return"["+ name +": "+ hp +" HP]";}
superest utile dans un certain scénario: si votre classe a la même méthode que votre superclasse, Java supposera que vous voulez celle de votre classe; supervous permet de demander la méthode de la superclasse à la place. thisn'est utile que pour rendre votre code plus lisible.
Le mot clé super peut être utilisé pour appeler le constructeur de la superclasse et pour faire référence à un membre de la superclasse
Lorsque vous appelez super () avec les bons arguments, nous appelons en fait le constructeur Box , qui initialise les variables largeur , hauteur et profondeur , auquel il fait référence en utilisant les valeurs des paramètres correspondants. Il ne vous reste plus qu'à initialiser son poids à valeur ajoutée. Si nécessaire, vous pouvez désormais classer les variables Box comme privées . Placez-vous dans les champs du modificateur privé de la classe Box et assurez-vous que vous pouvez y accéder sans aucun problème.
La superclasse peut contenir plusieurs constructeurs de versions surchargées, vous pouvez donc appeler la méthode super () avec différents paramètres. Le programme exécutera le constructeur qui correspond aux arguments spécifiés.
super est un mot-clé. Il est utilisé dans une définition de méthode de sous-classe pour appeler une méthode définie dans la superclasse. Les méthodes privées de la superclasse ne peuvent pas être appelées. Seules les méthodes publiques et protégées peuvent être appelées par le super mot-clé. Il est également utilisé par les constructeurs de classe pour appeler les constructeurs de sa classe parente.
Comme indiqué, à l'intérieur du constructeur par défaut, il y a un super () implicite appelé sur la première ligne du constructeur.
Ce super () appelle automatiquement une chaîne de constructeurs commençant en haut de la hiérarchie des classes et descendant dans la hiérarchie.
S'il y avait plus de deux classes dans la hiérarchie des classes du programme, le constructeur par défaut de classe supérieure serait appelé en premier .
En voici un exemple:
class A {
A(){System.out.println("Constructor A");}}class B extends A{public B(){System.out.println("Constructor B");}}class C extends B{public C(){System.out.println("Constructor C");}publicstaticvoid main(String[] args){
C c1 =new C();}}
Réponses:
super()
appelle le constructeur parent sans arguments.Il peut également être utilisé avec des arguments. C'est à dire
super(argument1)
et il appellera le constructeur qui accepte 1 paramètre du type deargument1
(s'il existe).Il peut également être utilisé pour appeler des méthodes à partir du parent. C'est à dire
super.aMethod()
Plus d'informations et tutoriel ici
la source
super(...)
ne peut être utilisé que comme première instruction dans un constructeur.Quelques faits:
super()
est utilisé pour appeler le parent immédiat.super()
peut être utilisé avec des membres d'instance, c'est-à-dire des variables d'instance et des méthodes d'instance.super()
peut être utilisé dans un constructeur pour appeler le constructeur de la classe parente.OK, maintenant implémentons pratiquement ces points de
super()
.Découvrez la différence entre le programme 1 et 2. Ici, le programme 2 vérifie notre première déclaration
super()
en Java.Programme 1
Production:
Maintenant, consultez le programme 2 et essayez de comprendre la principale différence.
Programme 2
Production:
Dans le programme 1, la sortie était uniquement de la classe dérivée. Il n'a pas pu imprimer la variable ni de la classe de base ni de la classe parente. Mais dans le programme 2, nous avons utilisé
super()
avec variablea
lors de l'impression de sa sortie, et au lieu d'imprimer la valeur de variablea
de la classe dérivée, il a imprimé la valeur de variablea
de la classe de base. Cela prouve donc que l'super()
on utilise pour appeler le parent immédiat.OK, vérifiez maintenant la différence entre le programme 3 et le programme 4.
Programme 3
Production:
Ici, la sortie est 200. Lorsque nous avons appelé
Show()
, laShow()
fonction de la classe dérivée a été appelée. Mais que devons-nous faire si nous voulons appeler laShow()
fonction de la classe parente? Consultez le programme 4 pour la solution.Programme 4
Production:
Ici, nous obtenons deux sorties, 100 et 200. Lorsque la
Show()
fonction de la classe dérivée est invoquée, elle appelle d'abord laShow()
fonction de la classe parente, car à l'intérieur de laShow()
fonction de la classe dérivée, nous avons appelé laShow()
fonction de la classe parente en mettant lesuper
mot - clé avant le nom de la fonction.la source
super()
n'est pas un mot-clé. Il s'agit d'une invocation de constructeur.super
est un mot-clé, et # 1 et # 2 n'ont de sens qu'avec cette définition.Article d'origine: Java: Calling super ()
Oui.
super(...)
invoquera le constructeur de la super-classe.Illustration:
Exemple autonome:
Tirages:
la source
super()
il invoquera le constructeur de la super-classe qui ne prend aucun argument. De même, il invoquera le constructeur à 1 argument si vous le faitessuper(arg1)
, et ainsi de suite.super()
ne sera donc pas un appel valide.Oui.
super()
est une utilisation spéciale dusuper
mot - clé où vous appelez un constructeur parent sans paramètre. En général, lesuper
mot - clé peut être utilisé pour appeler des méthodes substituées, accéder à des champs masqués ou invoquer le constructeur d'une superclasse.Voici le tutoriel officiel
la source
super()
est utilisé pour appeler le constructeur parent,super.myMethod()
est utilisé pour appeler une méthode redéfinie.L'appel du super constructeur sans arguments n'est qu'une perte d'espace d'écran et de temps de programmation. Le compilateur génère exactement le même code, que vous l'écriviez ou non.
la source
Oui,
super()
(en minuscules) appelle un constructeur de la classe parent. Vous pouvez inclure des arguments:super(foo, bar)
Il existe également un
super
mot - clé que vous pouvez utiliser dans les méthodes pour appeler une méthode de la superclasseUn rapide Google pour obtenir des résultats « Java super » dans ce
la source
C'est exact. Super est utilisé pour appeler le constructeur parent. Supposons donc que vous ayez un bloc de code comme ça
Vous pouvez ensuite affecter une valeur à la variable membre n.
la source
J'ai vu toutes les réponses. Mais tout le monde a oublié de mentionner un point très important:
super () doit être appelé ou utilisé dans la première ligne du constructeur.
la source
Juste super (); seul appellera le constructeur par défaut, s'il existe de la superclasse d'une classe. Mais vous devez explicitement écrire vous-même le constructeur par défaut. Si vous n'avez pas Java, vous en générerez une sans implémentation, enregistrez super (); , faisant référence à l'objet Superclass universel, et vous ne pouvez pas l'appeler dans une sous-classe.
la source
Par exemple, dans l'automatisation au sélénium, vous avez un PageObject qui peut utiliser le constructeur de son parent comme ceci:
la source
Je voudrais partager avec les codes ce que j'ai compris.
Le super mot-clé en java est une variable de référence qui est utilisée pour référencer des objets de classe parent. Il est principalement utilisé dans les contextes suivants: -
1. Utilisation de super avec variables:
Production:-
Production:-
3. Utilisation de super avec les constructeurs:
Production:-
la source
Constructeurs
Dans un constructeur, vous pouvez l'utiliser sans point pour appeler un autre constructeur.
super
appelle un constructeur dans la superclasse;this
appelle un constructeur dans cette classe:super
est utile si la superclasse doit s'initialiser.this
est utile pour vous permettre d'écrire tout le code d'initialisation matérielle une seule fois dans l'un des constructeurs et de l'appeler à partir de tous les autres constructeurs, beaucoup plus faciles à écrire.Méthodes
Dans n'importe quelle méthode, vous pouvez l'utiliser avec un point pour appeler une autre méthode.
super.method()
appelle une méthode dans la superclasse;this.method()
appelle une méthode de cette classe:super
est utile dans un certain scénario: si votre classe a la même méthode que votre superclasse, Java supposera que vous voulez celle de votre classe;super
vous permet de demander la méthode de la superclasse à la place.this
n'est utile que pour rendre votre code plus lisible.la source
Le mot clé super peut être utilisé pour appeler le constructeur de la superclasse et pour faire référence à un membre de la superclasse
Lorsque vous appelez super () avec les bons arguments, nous appelons en fait le constructeur Box , qui initialise les variables largeur , hauteur et profondeur , auquel il fait référence en utilisant les valeurs des paramètres correspondants. Il ne vous reste plus qu'à initialiser son poids à valeur ajoutée. Si nécessaire, vous pouvez désormais classer les variables Box comme privées . Placez-vous dans les champs du modificateur privé de la classe Box et assurez-vous que vous pouvez y accéder sans aucun problème.
La superclasse peut contenir plusieurs constructeurs de versions surchargées, vous pouvez donc appeler la méthode super () avec différents paramètres. Le programme exécutera le constructeur qui correspond aux arguments spécifiés.
la source
super est un mot-clé. Il est utilisé dans une définition de méthode de sous-classe pour appeler une méthode définie dans la superclasse. Les méthodes privées de la superclasse ne peuvent pas être appelées. Seules les méthodes publiques et protégées peuvent être appelées par le super mot-clé. Il est également utilisé par les constructeurs de classe pour appeler les constructeurs de sa classe parente.
Vérifiez ici pour plus d'explications.
la source
Comme indiqué, à l'intérieur du constructeur par défaut, il y a un super () implicite appelé sur la première ligne du constructeur.
Ce super () appelle automatiquement une chaîne de constructeurs commençant en haut de la hiérarchie des classes et descendant dans la hiérarchie.
S'il y avait plus de deux classes dans la hiérarchie des classes du programme, le constructeur par défaut de classe supérieure serait appelé en premier .
En voici un exemple:
Ce qui précède produirait:
la source