TP-programmation-orientee-o.../TP05/TestPolymorphisme.java
2023-06-20 21:02:09 +02:00

103 lines
3.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/** Tester le polymorphisme(principe de substitution) et la liaison
* dynamique.
* @author Xavier Crégut
* @version 1.5
*/
public class TestPolymorphisme {
/** Méthode principale */
public static void main(String[] args) {
// Créer et afficher un point p1
Point p1 = new Point(3, 4); // Est-ce autorisé ? Pourquoi ?
// oui, on utilise le constructeur de la classe
p1.translater(10,10); // Quel est le translater exécuté ?
// celui de Point
System.out.print("p1 = "); p1.afficher(); System.out.println();
// Qu'est ce qui est affiché ?
// p1 = (13.0, 14.0)
// Créer et afficher un point nommé pn1
PointNomme pn1 = new PointNomme(30, 40, "PN1");
// Est-ce autorisé ? Pourquoi ?
// oui, on utilise le constructeur de la classe
pn1.translater(10,10); // Quel est le translater exécuté ?
// celui de PointNomme, donc celui de Point par héritage
System.out.print("pn1 = "); pn1.afficher(); System.out.println();
// Qu'est ce qui est affiché ?
// pn1 = PN1:(40.0, 50.0)
// Définir une poignée sur un point
Point q;
// Attacher un point à q et l'afficher
q = p1; // Est-ce autorisé ? Pourquoi ?
// oui, les types des deux objets sont les mêmes
System.out.println("> q = p1;");
System.out.print("q = "); q.afficher(); System.out.println();
// Qu'est ce qui est affiché ?
// q = (13.0, 14.0)
// Attacher un point nommé à q et l'afficher
q = pn1; // Est-ce autorisé ? Pourquoi ?
// oui, PointNommé est pas un sous-type de Point
System.out.println("> q = pn1;");
System.out.print("q = "); q.afficher(); System.out.println();
// Qu'est ce qui est affiché ?
// q = PN1:(40.0, 50.0)
// Définir une poignée sur un point nommé
PointNomme qn;
// Attacher un point à q et l'afficher
// qn = p1; // Est-ce autorisé ? Pourquoi ?
// Non, Point nest pas un sous-type de PointNommé
// System.out.println("> qn = p1;");
// System.out.print("qn = "); qn.afficher(); System.out.println();
// Qu'est ce qui est affiché ?
// rien, ça compile pas
// Attacher un point nommé à qn et l'afficher
qn = pn1; // Est-ce autorisé ? Pourquoi ?
// oui, les types des deux objets sont les mêmes
System.out.println("> qn = pn1;");
System.out.print("qn = "); qn.afficher(); System.out.println();
// Qu'est ce qui est affiché ?
// qn = PN1:(40.0, 50.0)
double d1 = p1.distance(pn1); // Est-ce autorisé ? Pourquoi ?
// oui, par Liaison dynamique
System.out.println("distance = " + d1);
double d2 = pn1.distance(p1); // Est-ce autorisé ? Pourquoi ?
// oui, par héritage
System.out.println("distance = " + d2);
double d3 = pn1.distance(pn1); // Est-ce autorisé ? Pourquoi ?
// oui, par héritage
System.out.println("distance = " + d3);
System.out.println("> qn = q;");
// qn = q; // Est-ce autorisé ? Pourquoi ?
// Non, Point nest pas un sous-type de PointNommé
// System.out.print("qn = "); qn.afficher(); System.out.println();
// Qu'est ce qui est affiché ?
// rien, erreur de compilation
System.out.println("> qn = (PointNomme) q;");
qn = (PointNomme) q; // Est-ce autorisé ? Pourquoi ?
// oui, car q = pn1, transtypage
System.out.print("qn = "); qn.afficher(); System.out.println();
// System.out.println("> qn = (PointNomme) p1;");
// qn = (PointNomme) p1; // Est-ce autorisé ? Pourquoi ?
// non, p1 ne comporte pas de nom, conversion impossible
// System.out.print("qn = "); qn.afficher(); System.out.println();
}
}