3 votes

Comment accéder à une méthode qui se trouve à l'intérieur d'une classe qui se trouve à l'intérieur d'une autre méthode d'une autre classe en Java ?

Voici le programme qui se compile avec succès mais comment puis-je accéder à la méthode m2() de la classe B qui se trouve dans la méthode m1() de la classe A.

class A{  
    public void m1()
    {
      System.out.println("A-m1"); 
        class B{
            public void m2()
            {
                System.out.println("B-m2");
            }
        }//end of class B
    }//end of m1() method
}// end of class A

3voto

killjoy Points 884

Tout dépend de la portée. Si vous voulez invoquer m2() à la fin de m1() c'est aussi simple que de créer une nouvelle instance de B et appeler la méthode.

new B().m2()

Si vous voulez l'appeler en dehors de la méthode ou avant la déclaration, il ne vous le permettra pas à cause de la portée.

Si c'est le cas, vous devriez envisager de promouvoir sa portée au niveau de la classe.

2voto

GhostCat Points 83269

C'est simple : vous ne pouvez pas le faire en dehors de la classe (enfin, pas d'une manière raisonnable).

B est un local elle n'existe que dans le cadre de cette méthode. m1() . Vous pouvez donc sólo l'instancier dans cette méthode. Ainsi, dans m1(), vous pouvez faire un simple B b = new B() et ensuite invoquer b.m2() . Mais en dehors de cette méthode, il n'y a pas syntaxe qui vous permettrait d'accéder A.m1().B.m2() .

Eh bien, vous pouvez aussi l'instancier à l'extérieur de de cette méthode en utilisant la réflexion. Vous voyez, le mutilé Le nom de la classe est A$1B.class.

Vous pouvez donc utiliser Class.forName("A$1B") pour obtenir la classe correspondante ; et lorsque vous avez alors une instance de la classe A, vous pouvez à nouveau utiliser la réflexion pour instancier un objet de cette classe locale. Et sur cette instance, vous pouvez alors appeler m2() - toujours en utilisant la réflexion.

Mais : vous ne devriez même pas essayez pour faire ça. Si la classe B et sa méthode m2() doivent être appelées à partir d'autres endroits, il suffit de ne pas en faire un élément de la classe. local classe. Faites-en une classe interne, ou même une classe de premier niveau (peut-être non publique).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X