a2是一个引用变量,类型为A,b是B的一个实例。首先,在类A中找show(B obj),没有找到。于是到A的超类中找,而A没有超类,因此转向了A.this((super)B),(super)B为A,因此在A中找到了show(A obj)的方法,但是由于a2引用的类B的一个对象,B重写了A的show(A obj)方法,因此最终锁定到类B的show(A obj),输出为“B and A”
二、a2.show(c):
a2是一个引用变量,类型为A,b是B的一个实例。首先,在类A中找show(C obj),没有找到。于是到A的超类中找,而A没有超类,因此转向了A.this((super)C),(super)C为B,到这里为止,这个a2.show(c)变成了a2.show(b)的问题,而a2.show(b)上面已经分析了是输出"B and A",因此这里也是输出“B and A”