请看程序代码:
public class Father {
String var="Father";
 static String staticVar="FatherStatic";
 public void method(){
 System.out.println("Father");
 }}public class Son extends Father{
String var="son";
static String staticVar="sonstatic";
public void method(){
System.out.println("Son");
}}
public class Test01 {
public static void main(String[] args) {
Father f=new Son();
System.out.println(f.var);
System.out.println(f.staticVar);
f.method();
}}为何结果是:Father
FatherStatic
Son
前两个显示的为何是父类的成员变量,而不是子类的,为何方法打印的值是子类的??
菜鸟求指点???

解决方案 »

  1.   

    多态的3要术是父类引用指向之类对象,方法重写,和继承,你的f.var和f.staticVar有没有方法重写?所以不是多态,而f.method();有了方法重写所以多态
      

  2.   

    Father f=new Son();  是父类的引用指向子类对象 所以 f.var 的值是 Father, f.staticVar的值为FatherStatic
    而子类将父类的method() 重写所以打印出来的应该是 Son
      

  3.   

    通过引用变量来访问其包含的示例Field时,系统总是试图废话编译时类型定义的Field,而不是运行时类型所定义的Field
    Field就是你说的成员变量
      

  4.   

    你把子类改成下面的就打印出来子类的信息了,也就是把子类中var,staticVar前面的定义去掉public class Son extends Father{
      var="son";
      staticVar="sonstatic";
      public void method(){
        System.out.println("Son");
      }
    }