Maison >Java >javaDidacticiel >Pourquoi `super.super.method();` n'est-il pas autorisé en Java ?

Pourquoi `super.super.method();` n'est-il pas autorisé en Java ?

DDD
DDDoriginal
2024-12-23 11:13:091010parcourir

Why is `super.super.method();` Not Allowed in Java?

Pourquoi super.super.method(); Interdit en Java ?

L'utilisation de super.super.method(); en Java est interdit en raison de problèmes d'encapsulation. L'encapsulation vise à éviter de contourner le comportement de la classe parent.

Bien qu'il soit parfois raisonnable de contourner le comportement de sa propre classe (au sein de la même méthode), il est crucial de ne pas contourner le comportement du parent. Considérez la hiérarchie de classes suivante :

  • Collection : classe de base pour toute collection d'éléments
  • RedCollection : sous-classe représentant une collection d'éléments rouges
  • BigRedCollection : sous-classe de RedCollection représentant une collection de gros objets rouges

Il est logique de définir ce qui suit méthodes :

  • Collection#add(Item) : ajoute un élément à la collection.
  • RedCollection#add(Item) : méthode remplacée qui garantit que les éléments ajoutés sont rouges.
  • BigRedCollection#add(Item) : méthode remplacée qui garantit que les éléments ajoutés sont volumineux et rouge.

Cela garantit que les sous-classes respectent les contraintes imposées par leurs classes parentes.

Cependant, si super.super.add() était autorisé, une sous-classe malveillante de NaughtyCollection pourrait contourner l'exigence d'objet rouge de RedCollection :

  • NaughtyCollection#add(Item) : ignore le rouge exigence d'élément, ajout de n'importe quel élément.

Cela briserait l'invariant établi par RedCollection, créant une collection d'éléments qui pourraient ne pas être rouges.

Par conséquent, super.super.method( ) les appels sont interdits en Java pour maintenir l'encapsulation et appliquer les comportements de classe.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn