|
class A { int bin(A x){ return 1; } } class B extends A{ int bin(A x){ if (x instanceof B) return bin((B)(x)); else return super.bin(x); } int bin(B x){ return 2; } } class AB{ static A aa = new A(); static B bb = new B(); static A ab = bb; static void print (String s, int r){ System.out.print(s); System.out.println(r); } public static void main (String argv[]) { print ("aa.bin(aa)=",aa.bin(aa)); print ("aa.bin(ab)=",aa.bin(ab)); print ("aa.bin(bb)=",aa.bin(bb)); print ("ab.bin(aa)=",ab.bin(aa)); print ("ab.bin(ab)=",ab.bin(ab)); print ("ab.bin(bb)=",ab.bin(bb)); print ("bb.bin(aa)=",bb.bin(aa)); print ("bb.bin(ab)=",bb.bin(ab)); print ("bb.bin(bb)=",bb.bin(bb)); } } |
2 dès que x et y sont tous deux
de la class B, indépendemment de leur type statique. En effet dès que
x est de la classe B, la méthode bin est choisie dans la
classe B indépendemment du type (statique) de x. Par ailleurs,
les deux implémentations de bin dans la classe B retournent
2 dès que y est un objet de la classe B.