这个结果表明,子类的对象(由父类的引用handle)调用到的是父类的成员变量。所以必须明确,运行时(动态)绑定针对的范畴只是对象的方法。

  现在试图调用子类的成员变量name,该怎么做?简单的办法是将该成员变量封装成方法getter形式。

  代码如下:

  Java代码

public class Father { 
  protected String name = "父亲属性"; 
  public String getName() { 
    return name; 
  } 
  public void method() { 
    System.out.println("父类方法,对象类型:" + this.getClass()); 
  } 

   
public class Son extends Father { 
  protected String name="儿子属性"; 
   
  public String getName() { 
    return name; 
  } 
   
  public void method() { 
    System.out.println("子类方法,对象类型:" + this.getClass()); 
  } 
   
  public static void main(String[] args) { 
    Father sample = new Son();//向上转型 
    System.out.println("调用的成员:"+sample.getName()); 
  } 
}

  结果:调用的是儿子的属性