103 lines
3.7 KiB
Java
103 lines
3.7 KiB
Java
|
/** 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 n’est 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 n’est 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();
|
|||
|
}
|
|||
|
|
|||
|
}
|