TP-programmation-orientee-o.../TP05/TestPolymorphisme.java

103 lines
3.7 KiB
Java
Raw Normal View History

2023-06-20 19:02:09 +00:00
/** 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();
}
}