# TAS - COURS 5 ###### tags: `TAS` ## <ins>Exercice Surcharge :</ins> ```java class A { void m(B x) { /* A1 */ } void m(C x, B y) { /* A2 */ } } class B extends A { void m (A x) { /* B1 */} void m (B x , A y) { /* B2 */ } void m (C x , B y) { /* B3 */ } } class C extends B { void m (C x) { /* C1 */ } void m (C x, C y) { /* C2 */ } void m (C x, B y) { /* C3 */ } } class D { public static void main(String[] args) { A a = new A(); B b = new B(); A a1 = b; C c = new C(); B b1 = c; A a2 = b1; // QUESTION 1 a.m(b); // m(B) - A1 a.m(a1); // clash b.m(a1); // m(A) - B1 b.m(b); // m(B) - A1 c.m(c); // m(C) - C1 c.m(b1); // m(B) - A1 // QUESTION 2 a.m(b,b); // clash a.m(c,c); // m(C, B) - A2 a.m(c,b); // m(C, B) - A2 b.m(b,b); // m(B, A) - B2 b.m(c,c); // m(C, B) - B3 b.m(c,b1); // m(C, B) - B3 c.m(b,b); // m(B, A) - B2 * c.m(c,c); // m(C, C) - C2 c.m(c,b1); // m(C, B) - C3 // BONUS /* Le choix de la fonction à appeler * se fait sur la référence (ici b1 pointe sur C), * les arguments par contre doivent bien matcher * le type ici (C, B) */ b1.m(c, b1); // m(C, B) - C3 a1.m(c, c); // m(C, B) - B3 a2.m(c, c); // m(C, B) - C3 } } ```