Partage
  • Partager sur Facebook
  • Partager sur Twitter

plymorphe

Sujet résolu
    26 décembre 2009 à 9:04:02

    bonjour,
    je débutant en java et je ne compris pas la signification de méthode polymorphe,
    qqu'un m'aide svp
    • Partager sur Facebook
    • Partager sur Twitter
      26 décembre 2009 à 11:27:37

      La polymorphie en java c'est l'art de stoker des objet de classes filles, très évolués dans des des objets de classe mère, plus basiques mais avec des fonction génériques.

      Imaginons que tu aies une classe (toujours imaginer un truc farfelu à ce moment là) huem une classe disons "Boisson"! Cette classe contient une méthode et une variable d'instance initialisée par le constructeur, la valeur prise en argument. Le volume de ta boisson, et la méthode equals qui te permet de savoir si les deux liquides ont le même volume. Cette méthode est héritée de la classe object (c'est un détail mais qui a son importance) et sa signature est (pour info)
      boolean equals(Object o)
               // Indicates whether some other object is "equal to" this one.
      


      Et bien cette classe est "extends" par deux classe, une "Alcool" et une autre "Soft" Elles contiennent chacune leur méthodes et leur variables de classe, mais pas de méthode "equals".

      Et bien le polymorphisme te permet de stocker des objet "Soft" et "Alcool" dans des objets "Boisson"

      Boisson b1 = new Alcool(5); //5 litres
      Boisson b2 = new Alcool(3); //3 litres
      


      Et bien en faisant ça, tu peux utiliser la méthode "equals" entre deux objet boissons!

      if(b1.equals(b2))
      {
           System.out.println("le volume est égal");
      }
      else
      {
           System.out.println("le volume est différent");
      }
      

      Bah, suffisait d'implémenter la méthode equals dans la classe "Alcool"


      Oui, c'est même ce qu'on ferait dans le cas de mon exemple car, pour des boissons, on ne voudra pas uniquement comparer le volume. Mais cette technique à un avantage. Imaginons que je veuille comparer un alcool et un soft.

      Boisson b1 = new Alcool(5); //5 litres
      Boisson b2 = new Soft(3); //3 litres
      if(b1.equals(b2))
      {
           System.out.println("le volume est égal");
      }
      else
      {
           System.out.println("le volume est différent");
      }
      


      Et bien là, ça fonctionne, malgré le fait que mes deux objets soient de types différents.

      C'est ça le polymorphisme, comparer des poires et des pommes, parce que au fond, ça reste des fruits.

      On notera que la méthode equals est aussi un exemple de polymorphisme, car ses arguments sont de type Object. Et comme toutes les classes sont héritées implicitement de la classe Object, tout objet peut être stocké dans un Object.

      Object o1 = b1;// de notre exemple précédent
      Object o2 = new Soft(5);
      


      Pour info


      L'implémentation de la "méthode equals(object o)" devra utiliser l'opérateur "instanceof", pour savoir si notre objet o est bien un objet de type Boisson, ou hérité de Boisson. Et si c'est le cas, on pourra faire un cast de type Boisson sur notre objet o afin d'accéder à sa variable d'instance "volume"

      Le polymorphisme c'est bien, mais c'est parfois un peu casse tête.

      Et en prime, l'implémentation de la méthode equals.

      boolean equals(Object o)
      {
          if(o == this)
          {
             return true;// si les objet sont les mêmes, (pointeurs identiques) ils sont forcément égaux
          }
      
          if(!(o instanceof Boisson))
          {
             return false; // si o n'est pas une instance de Boisson, ils ne seront jamais égaux. 
          } //Au passage, le return arrête l'exécution, on peut donc caster sans soucis après ça.  
         Boisson b=(Boisson)o;//cast
          return (b.volume==this.volume);
        
      }
      


      Si tu as des questions n'hésite pas.
      • Partager sur Facebook
      • Partager sur Twitter
        26 décembre 2009 à 11:51:53

        merci bien Pyros,
        j'essayé d'écrire un pgme en java assure l'heritage mais il ya des erreurs que je ne sais pas comment les corriger. voilà le code:
        public class ex11 {
        	int extr1,extr2;
        	
        	ex11()
        	{
        		System.out.println("tapez les extremités de segments: ");
            	//**********extr1***********
            	System.out.print("extr1=");
            	String s="";
            	try{
            		s=((new BufferedReader(new InputStreamReader (System.in))).readLine());
            	 }catch (IOException e){
            		 e.printStackTrace();
            	 }
            	 extr1 = Integer.parseInt(s);
        
        ..........
         public Class EssaiSegment extends ex11
        	{
        		
        		super();
        		int x;
        		 
        		EssaiSegment()
        		{
        			Super();
        			System.out.println("tapez la coordonnée d'un point:");
        			String s = "";
        			try{
        				s=((new BufferedReader (new InputStreamReader (System.in))).readLine());
        			}catch (IOException e){
        				e.printStackTrace();
        			}
        			x= Integer.parseInt(s);
        			}
        			
        		public boolean point()
        		{
        			if ((x<=extr1 && x >=extr2)||(x<=extr2 &&x >=extr1))
        				return true;
        
        
        
        
        
        
        
        .................
        			else
        				return false;
        
        		}
        
        • Partager sur Facebook
        • Partager sur Twitter
          26 décembre 2009 à 18:22:04

          Tu vas peut être me trouver pointilleux, mais essaye de mettre un minimum de ponctuation dans tes phrases et évite le sms.

          Quelles erreurs? C'est un peu flou comme problème :) Le code que tu as mis, tout est dans le même fichier? Tu as fais un copier coller pur ou tu as retiré des bouts?

          Edit: je n'ai pas regardé tout ton code, mais un truc me pique les yeux, tu utilises un bufferdreader et tu cast un String en int... il existe la classe scanner qui est beaucoup plus pratique.

          Scanner sc = new Scanner(System.in);
          int a = sc.nextInt();
          System.out.println(a);
          
          • Partager sur Facebook
          • Partager sur Twitter

          plymorphe

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown