Médiaforma

Java – Classes et méthodes abstraites, polymorphisme

Print Friendly

Les classes abstraites sont utilisées pour définir des méthodes qui dépendent d’autres méthodes dont le code n’est pas défini dans la classe. Ici par exemple, la méthode rapport() fait appel aux méthodes abstraites perimetre() et surface(). Seule leur signature est définie dans la classe abstraite :

public abstract class Forme {
   public abstract float perimetre(); //methode abstraite
   public abstract float surface(); //methode abstraite

   public double rapport() {
      return surface() / perimetre();
   }
}

Nous pourrions par exemple créer une classe Cercle qui étend la classe Forme, qui définit les deux méthodes abstraites (perimetre() et surface()) de la classe Forme et qui surcharge la méthode toString de java.lang.Object :

public class Cercle extends Forme {
   private int rayon;

   public Cercle(int r) {
      this.rayon=r;
   }

   public float perimetre() {
      float resultat = 2 * (float)Math.PI * rayon;
      return resultat;
   }

   public float surface() {
      return (float)Math.PI * rayon * rayon;
   }

   public String toString() {
      return ("un cercle de rayon " + rayon);
   }
}

De la même manière, nous pourrions définir la classe Rectangle() qui étend la classe Forme, qui définit les deux méthodes abstraites (perimetre() et surface()) de la classe Forme et qui surcharge la méthode toString de java.lang.Object :

public class Rectangle extends Forme {
  private int longueur, largeur;

  public Rectangle(int longueur, int largeur) {
    this.longueur = longueur;
    this.largeur = largeur;
  }

  public float perimetre() {
     return 2 * (longueur + largeur);
  }

  public float surface() {
     return longueur * largeur;
  }

  public String toString() {
    return ("un rectangle de longueur " + longueur + " et de largeur " + largeur);
  }
}

Voici un exemple d’utilisation des sous-classes de Forme :

class EssaiFormes {

  public static void main(String[] arg) { 

      Cercle = new Cercle(2);

      Rectangle = new Rectangle(2, 1);

     

      System.out.printf("Rapport Surface/Périmètre pour " + cercle + ": %.3f\n", cercle.rapport());

      System.out.printf("Rapport Surface/Périmètre " + rectangle + " : %.3f\n", rectangle.rapport());

  }

}

Voici le résultat :

 

Essayez ce code et vérifiez son fonctionnement.

Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

No comments yet.

Leave a Reply