Différence entre “ce” et“super” mots-clés en Java
Quelle est la différence entre les mots-clés this
et super
?
Les deux sont utilisés pour accéder à des constructeurs de la classe à droite? Pouvez-vous vous expliquer?
Vous devez vous connecter pour publier un commentaire.
Permet de considérer cette situation
La sortie va être
La troisième ligne est en cours d'impression "animal:manger" parce que nous sommes d'appel
super.eat()
. Si nous avons appeléthis.eat()
, il aurait imprimé en tant que "chien:manger".super
est utilisé pour accéder aux méthodes de la classe de base, tandis quethis
est utilisé pour accéder aux méthodes de la classe en cours.L'extension de la notion, si vous écrivez
super()
, il fait référence au constructeur de la classe de base, et si vous écrivezthis()
, il fait référence au constructeur de la très classe où vous écrivez ce code.this
est une référence à l'objet saisi au cours actuel, etsuper
est une référence à l'objet typé en tant que parent de la classe.Dans le constructeur,
this()
appelle un constructeur défini dans la classe en cours.super()
appelle un constructeur défini dans la classe parent. Le constructeur peuvent être définies dans la classe parent, mais il va se réfèrent à un substituée la plus proche de la classe en cours. Les appels vers d'autres constructeurs peuvent être effectuées uniquement la première ligne dans un constructeur.De l'appel de méthodes fonctionne de la même manière. L'appel de
this.method()
appelle une méthode de la classe actuelle oùsuper.method()
fera appel à la même méthode, telle que définie dans la classe parent.De votre question, j'en déduis que vous êtes vraiment se demander à propos de l'utilisation de
this
etsuper
dans le constructeur de chaînage; par exemple,contre
La différence est simple:
La
this
former des chaînes à un constructeur de la classe en cours; c'est à dire dans leA
classe.La
super
former des chaînes à un constructeur dans l'immédiat super-classe; c'est à dire dans leB
classe.this
se réfère à un état de référence de la actuel classe.super
se réfère à la parent de la classe actuelle (qui a appelé à lasuper
mot-clé).En faisant
this
, il permet l'accès aux méthodes et attributs de la classe actuelle (y compris de sa propre salle de méthodes et attributs).super
vous permet d'accéder public/protected méthode attributs/des parent(de base) de la classe. Vous ne pouvez pas voir le parent privé de la méthode/attributs.base
etderived
classes et pasbased
etderived
objets. Peut-être que la nouvelle de la littérature distingue la différence.super() & ce()
REMARQUE:
Nous pouvons utiliser super() et ce() uniquement dans le constructeur pas n'importe où d'autre, tout
tentative de le faire conduire à l'erreur de compilation.
Nous devons garder soit super() ou ce (ou) de la première ligne de la
constructeur mais PAS les deux simultanément.
super & ce mot-clé
REMARQUE: Nous pouvons utiliser n'importe où dans une classe à l'exception des zones statiques(static bloc ou de la méthode), tout
tentative de le faire conduire à l'erreur de compilation.
this
est utilisé pour accéder à des méthodes et des champs de l'objet courant. Pour cette raison, il n'a pas de sens dans les méthodes statiques, par exemple.super
permet l'accès à la non-privé, de méthodes et de champs dans la super-classe, et pour accéder à des constructeurs de l'intérieur de la classe des constructeurs seulement.Lors de l'écriture de code, en général, ne veulent pas se répéter. Si vous avez une classe qui peut être construit avec différents nombres de paramètres d'une solution commune pour éviter de vous répéter, est de simplement appeler un autre constructeur avec paramètres par défaut dans les arguments manquants. Il y a seulement un ennuyeux restriction à la présente, - elle doit être la première ligne de la déclaration de constructeur. Exemple:
Comme pour le
super()
constructeur, contrairement àsuper.method()
d'accès, il doit être la première ligne de votre constructeur. Après cela, il est très bien comme lathis()
constructeurs, DRY (Don't Repeat Yourself), si la classe que vous étendre a un constructeur qui fait partie de ce que vous voulez, puis l'utiliser et puis continuer avec la construction de votre objet, exemple:Informations supplémentaires:
Même si vous ne le voyez pas, la valeur par défaut sans argument du constructeur appelle toujours
super()
premier. Exemple:est équivalent à
Je vois que beaucoup ont mentionné l'aide de la
this
etsuper
mots-clés sur les méthodes et les variables - est du tout bon. Rappelez-vous juste que les constructeurs ont des restrictions sur leur utilisation, le plus notable est qu'ils doivent être la première instruction de la déclaration de constructeur et vous ne pouvez en utiliser qu'un.ce mot-clé à utiliser pour appeler le constructeur de la même classe (les autres surchargé constructeur)
syntaxe: ce (args liste); //compatible avec args liste dans autre constructeur de la même classe
super mot-clé à utiliser pour appeler le constructeur de la super classe.
syntaxe: super (args liste); //compatible avec args liste dans le constructeur de la super classe.
Ex: