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