Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Futur Membre du Club
    Polymorphisme les différents cas de "Parent PC = new Child();"
    Bonjour,

    Je suis nouveau en développement orienté objet, et en Java. En ce moment je suis au polymorphisme.
    Et j'ai écrit quelques lignes pour faire des tests, mais cela m'a encore plus embrouillé car je ne trouve pas les mêmes résultats.
    En effet :
    PC.mP_1(); // "mP_1_Child" => C'est l'enfant qui est pris en comptes
    Obj_1.m1(PC); // "Parent" => C'est le père qui est pris en comptes

    C'est quoi la logique ? Pour quoi une fois c'est le père qui est pris en compte et une autre fois l'enfant ?

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    class Parent {
    	void mP_1(){
    		System.out.println("mP_1_Parent");
    	}
    }
    class Child extends Parent {
    	void mP_1(){
    		System.out.println("mP_1_Child");
    	}
    }
    public class Test_Pere_Fils_Refernce{
    	public void m1(Parent A){
    		System.out.println("Parent");
    	}
    	public void m1(Child m){
    		System.out.println("Child");
    	}
    	public static void main(String[] args){
     
    // Reference Pere/Objet Enfant
    		Parent PC = new Child(); 
     
    		Test_Pere_Fils_Refernce Obj_1 = new Test_Pere_Fils_Refernce();
     
    // ??? Je ne comprends pas la différence dans la logique !!
    // ??? Une fois c'est le père qui est pris en compte et parfois c'est l'enfant
    // ??? C'est quoi la règle ici ?
     
    		PC.mP_1(); // "mP_1_Child" => C'est l'enfant qui est pris en comptes
    		Obj_1.m1(PC); // "Parent" => C'est le père qui est pris en comptes
     
    	}
    }

  2. #2
    Membre expérimenté
    ta méthode m1 ne teste pas le type effectif:
    ça marche comme ça: un fils est un parent mais le type utilisé par le compilateur est celui de PC mais ce n'est pas le type effectif
    il faudrait que dans m1 tu appelles la bonne méthode du parent et tu verras que c'est correct: ce que tu passes est vraiment un fis
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (un peu de pub pour mon site: http://scrountch.info/java )