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
.