Je ne sais pas si mon titre de question décrit ma situation à peine, alors mes excuses si ce n'est pas le cas! Quoi qu'il en soit, disons que j'ai l'extrait de code suivant (la visibilité est comme indiqué):
(ParentClass.this).parentMethod();
3 Réponses :
Une classe intérieure non statique peut accéder à toutes les méthodes de la classe enfermante comme si c'était des méthodes propres: une classe interne statique ne peut pas, comme une classe interne statique n'est pas lié à une instance de la classe mère. Cela ne peut appeler que des méthodes statiques sur la classe jointe. P> comme pour les méthodes lors de la prise en compte de l'héritage, une méthode dans une classe interne non statique peut utiliser toutes les méthodes de la classe englobante (externe). < / p> la partie intéressante est test2.super.getone () code> qui obtient en effet getone () à partir de
test2.super code>, qui est un test
< / code>. Ceci est juste comme Test2 accéderait à la méthode, à savoir utiliser
Super code> bien que préfixé avec
Test2 code> pour indiquer que vous accédez à l'espace de noms de la classe extérieure. p>
Il n'y a aucun moyen d'accéder à "Méthode de classe parent" en Java, de manière de manière de manière de manière de manière à visibilité (sauf pour C'est, si Toutefois, si Super.parentMethod () code> dans la sous-classe
ParentMethod () code>). p>
enfantClass code> remplace
parentmethod () code>, il n'y a aucun moyen d'appeler
parentclass.parentmethod () code> (contourner
EnfantClass.parentMethod () code>) à partir d'autres méthodes de
EnfantClass Code>. P>
enfantClass code> ne remplace pas
parentMethod () code>, cette méthode est héritée par
enfantClass code>, afin que vous puissiez y accéder comme une méthode
enfant code>, c'est-à-dire simplement comme
parentmethod () code>. p>
Ceci compile bien:
class MyClass { } class ParentClass { protected void parentMethod() { } } class ChildClass extends ParentClass { private void myMethod() { MyClass mine = new MyClass() { public void anotherMethod() { parentMethod(); // this works } }; } }
+1: Cela ne fonctionnera que si le parentclass est dans le même package que l'appelant. C'est-à-dire parce que protégé code> permet d'accéder aux enfants et à emballer des classes locales.
@Peter: Hmm, êtes-vous sûr? Je viens d'essayer de mettre les 3 classes dans 3 paquets différents. Je pense que cela fonctionne car le myClass code> in
myMethod () code> est en fait une classe interne qui a accès aux méthodes code> protégées code> de sa classe extérieure
EnfantClass code>, et donc le
parentclass code> il s'étend.
@ Whitefang34, vous êtes correct. Je n'ai pas compilé mon code de test correctement.
@Peter: Vous m'avez assisté là-bas pendant une minute. J'ai presque répondu avec "bon point" et puis je pensais "attendre une minute ..." et devait y essayer :)
@ Whitefang34, je ne serais correct que si l'enfance n'a pas étendu parentclass.
Merci pour les réponses à tous, j'ai réalisé le problème dans le code d'origine. Vous avez raison, ce code compile tout simplement bien.
Vous ne pouvez pas simplement appeler
parentmethod () code> au lieu de
(parentclass.this) .parentMethod (); code>
"Une méthode protégée trouvée dans Parentclass" peut également être trouvée chez l'enfant, à cause de l'héritage