众所周知,方法可以被动态绑定,在子类被向上转型为父类时,虚拟机可以找到所运行对象的真正类型,并根据对象真正的类型来判断到底是调用父类的方法还是调用子类的方法,这也被称为多态。
那变量呢?我们来看看:
package cantellow.text12;
class Parent
{
public int i = 10;
static int si = 10;
final int fi = 10;
static final int sfi = 10;
}
public class Son extends Parent
{
public int i = 30;
static int si = 30;
final int fi = 30;
static final int sfi = 30;
public static void main(String[] args)
{
Parent parent = new Son();
Son son = new Son();
System.out.println(parent.i + son.i);
System.out.println(parent.si+son.si);
System.out.println(parent.fi + son.fi);
System.out.println(parent.sfi + son.sfi);
}
}
输出结果是:
40
40
40
40
问题:为什么变量不根据对象的真正类型来选择相应的变量呢?
===================================================================
参考解释:
运行时(动态)绑定针对的范畴只是对象的方法,变量不会被动态绑定,静态变量和常量也是这样的。