1.2 Sous-types et typage dynamique
En Java la relation d'héritage entraine la relation de sous-typage (£).
-
si t est un type alors t £ t;
- si SC est sous-classe de C, alors SC £ C;
- si SI est sous-interface de I, alors SI £ I;
- si C implante I alors C £ I;
- si t2 £ t1, alors t2 [] £ t1 []
Si t2 £ t1T, alors toute valeur de type t2 peut etre
utilisée en place et lieu d'une valeur de type t1.
Soit le programme Java suivant :
class A {
int m1 (A x) { System.out.println(1+" "); return (1);}
boolean n1 (A x, A y) {System.out.println(4+" "); return (false);}
}
class B extends A {
int m2 (B x) { System.out.println(5+" "); return (5);}
int m1 (A x) { System.out.println(6+" "); return (6);}
boolean n2 (B x, B y) {System.out.println(8+ " "); return (false);}
}
class ex0 {
public static void main(String [] args) {
A a1 = new A ();
B b1 = new B();
A a2 = b1;
B b2 = (B)a2;;
System.out.println("*1-------");
a1.m1(a1);
b1.m2(b1);
b1.m1(b1);
a1.n1(a1,a1);
b1.n2(b1,b1);
System.out.println("*2-------");
a1.m1(b1);
b1.m2((B)a2);
b1.m1(b1);
a1.n1(b1,b1);
b1.n2((B)a2,b2);
System.out.println("*3-------");
a2.m1(a1);
a2.n1(b1,b1);
}
}
Son exécution donne :
*1-------
1
5
6
4
8
*2-------
1
5
6
4
8
*3-------
6
4