3 votes

Méthode d'appel déroutante en Java

class Parent
{
    private void method1()
    {
        System.out.println("Parent's method1()");
    }
    public void method2()
    {
        System.out.println("Parent's method2()");
        method1();
    }
}

class Child extends Parent
{
    public void method1()
    {
        System.out.println("Child's method1()");        
    }
}
class test {
    public static void main(String args[])
    {
        Parent p = new Child();
        p.method2();
    }
}

Je ne comprends pas pourquoi, dans Parent::method2(), lorsque l'on invoque method1(), cela appelle la method1() des parents et non celle des enfants ? Je vois que cela ne se produit que lorsque la méthode1() est privée ? Quelqu'un peut-il m'expliquer pourquoi ?
Merci.

5voto

Melv Points 1738

private ne peuvent pas être remplacées, d'où l'utilisation de l'option method1 que vous spécifiez sur Child n'est pas lié. javac suppose que vous devez vouloir dire le method1 sur le parent. Le changer en protected fonctionnera.

5voto

Mark Elliot Points 31871

Cela se fait sur la base des règles de scoping ; dans les cas suivants Parent la meilleure correspondance pour method1 est la version privée de la classe.

Si vous deviez définir method1 como public o protected sur Parent et remplacer la méthode dans Child puis en appelant method2 invoquerait Child 's method1 à la place.

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