日期:2014-05-20  浏览次数:20794 次

java 当父类对象变量引用子类对象
java 中当父类对象变量引用子类对象后,用变量调用静态常量,调用的是子类还是父类?
多态

------解决方案--------------------
举一个例子吧。。。、你这样说太抽象
一般来说,是调用的范围小的那一个。。。
你问的是这个意思么?

public class Test {
public static void main(String[] args) {
Father father=new Son();
System.out.println(father.i);//输出1
System.out.println(father.ii);//输出11
}
}
class Father{
public static int i=1;
public int ii=11;
}
class Son extends Father{
public static int i=2;
public int ii=12;
}

------解决方案--------------------
多态是动态绑定,才有父类引用指向子类对象。
而如果是调用的是静态变量或方法的,因为是静态,则不存在多态,所以,父类引用调用和子类同名的静态方法或静态变量时,会调用父类中的而不是子类中的方法。
如果父类中的方法是静态的,子类也有一个相同的方法名的方法,这也不叫重写,属于两个方法。因为静态方法和变量属于类,不参与多态之中来。
------解决方案--------------------
静态常量属于一个class,所以声明的是什么类,就会用那个类的常量的值。你的这种编程逻辑本来就是不可取的,既然调用的是静态常量就要用类的名,而不是用一个类的实例。调用一个静态方法也是直接用类名,而不是用类的实例