Question masquage

Programmation Avancée

Modérateur : douinj

guill_f58
Messages : 19
Inscription : 10 oct. 2020 19:42

Question masquage

Message par guill_f58 » 14 oct. 2020 16:19

Bonjour,
j'ai une question au sujet du marquage. Il est bien dit que pour avoir un marquage, il faut intégré la même signature des méthodes de la classe mère dans la classe fille. J'ai fait plusieurs essais et cela marche dans ce sens. Par contre, quand le type retours est différent, elle est comprise comme ayant la même signature.

Classe A:

Code : Tout sélectionner

    A f() {
        System.out.println("Je suis dans A");
        return new A();
    }
Classe B:

Code : Tout sélectionner

    A f() {
        System.out.println("Je suis dans B");
        return new B();
    }
Main:

Code : Tout sélectionner

        A a = new B();
        A a1 = a.f();
Ici, je comprends bien que le message affiché est "System.out.println("Je suis dans B");" car B reprend la même signature que A donc la méthode est bien masquée.
Par contre si je change le type de retours dans la classe B, j'ai le même résultat alors que la signature est différente:

Code : Tout sélectionner

    B f() {
        System.out.println("Je suis dans B");
        return new B();
    }
Bonne fin de journée
Dernière édition par guill_f58 le 14 oct. 2020 16:41, édité 1 fois.

douinj
Messages : 153
Inscription : 18 mars 2009 15:46

Re: Question masquage

Message par douinj » 14 oct. 2020 16:30

Bonjour, oui c'est ce que l'on a nommé Covariance hier soir,

regardez les diapositives 19-21 du cours
la specif de Java ici https://docs.oracle.com/javase/specs/jls/se15/jls15.pdf Page 268, paragraphe 8.4.5

http://en.wikipedia.org/wiki/Covariance ... r_science)

Bonne lecture

guill_f58
Messages : 19
Inscription : 10 oct. 2020 19:42

Re: Question masquage

Message par guill_f58 » 14 oct. 2020 16:45

douinj a écrit :
14 oct. 2020 16:30
Bonjour, oui c'est ce que l'on a nommé Covariance hier soir,

regardez les diapositives 19-21 du cours
la specif de Java ici https://docs.oracle.com/javase/specs/jls/se15/jls15.pdf Page 268, paragraphe 8.4.5

http://en.wikipedia.org/wiki/Covariance ... r_science)

Bonne lecture
Merci, par conséquent la covariance c'est quand on peut changer le type de retour d'une méthode dans une situation d'héritage par exemple (classe forte/faible). Mais le masquage ne prend pas en compte le type de retour mais uniquement son nom et ses paramètres ?

Sinon pour information, votre nouvelle upload de la conférence fonctionne !

douinj
Messages : 153
Inscription : 18 mars 2009 15:46

Re: Question masquage

Message par douinj » 14 oct. 2020 17:10

Mais le masquage ne prend pas en compte le type de retour mais uniquement son nom et ses paramètres ?
le masquage prend en compte le type de retour qui doit être un sous-type, le nom de la méthode ainsi que ses paramètres
Covariance ==> B extends A

En plus détaillé ici
https://en.wikipedia.org/wiki/Covariant_return_type

Nous retravaillerons ces notions dans le cours sur la généricité

à étudier

Répondre