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();
|
||
}
|
||
|
||
}
|