this就是一个STChild    这样写就比较清楚了:
STChild x=this;((STParent)x).getWealth(); 
这时应该是STChild的getWealth()被调用(override)((STGrandParent)this).getWealth(); 
这时仍然应该是STChild的getWealth()被调用(override)
对于field,是“hide",所以
System.out.println(((STParent)this).wealth); 是10000.0 
wealthSystem.out.println(((STGrandParent)this).wealth); 是5000.0 super指向”直接父类“,所以
System.out.println(super.wealth); 是10000.0

解决方案 »

  1.   

    用一句 C++ 的说法来说:
      在 Java 的类中,所有的没有申明为 final 的函数都是 “虚”的,一个子类对象的指针(在 Java 中应该说成是“句柄”)无论怎么转换成一个基类的指针,他所引用一般函数都是子类中覆盖过的函数。在 Java 中一个子类只可以执行他直接继承的父类的函数,使用方法是使用 super 关键字。一个类中的代码是没有办法调用他直接继承的父类的上一级父类的成员函数的。
      

  2.   

    [在 Java 的类中,所有的没有申明为 final 的函数都是 “虚”的,一个子类对象的指针(在 Java 中应该说成是“句柄”)无论怎么转换成一个基类的指针,他所引用一般函数都是子类中覆盖过的函数。]这里有一个例外,就是static函数不是”虚“的,严格说来:
    在 Java 的类中,所有的没有申明为 final 的instance函数都是 “虚”的
      

  3.   

    我试了输入结果是这样的:
    Child-200000.0
    Parent-100000.0
    Child-200000.0
    Child-200000.0  //那为什么是Child-200000.0 ,它是这句((STGrandParent)this).getWealth();输入的,我感觉应是GrandParent-50000.0 怎么和((STParent)this).getWealth();调用的是同一个,不明白?
    200000.0
    100000.0
    100000.0
    50000.0
      

  4.   

    to hahaha88(忧郁的眼神,稀嘘的胡子喳):你们去看看http://www.csdn.net/expert/topic/468/468439.shtm它的结果好像有些和你们说的矛盾哦,不明白
      

  5.   

    函数调用次序是通过V-Table来找的, 永远是调用函数Instance的Scope.  在调用wealth()时, Instance Scope 是 child.  但是如果有两个类是这样的话
    public class father
    {
      public int foo()
      {
         return 1;
      }  public int bar()
      {
        return foo() * 5;
      }
    }public class son extends father
    {
      public int foo()
      {
        return 2;
      }
    }在调用 new son().bar() 的时候, Instance scope 已经转换成father了。  这也就是为什么我们需要abstract这个关键字的原因:  和C++的纯虚函数一样。  至于Member variable, 则他的Scope是跟着Class Instance走的, 并没有一个VTable.  所以他在GrandFather的Scope里。
      

  6.   

    厉害啊!哈哈我看了,hushuo(小鬼魂)和Patrick_DK(疾风摩郎)说得是对的:static方法或private方法都是编译时绑定的。
      

  7.   

    to 忧郁的眼神,稀嘘的胡子喳GG: 您老有没有白天上CSDN的经历啊?:)
      

  8.   

    Zhakrin() ! 
    好啊! 
    这也就是为什么我们需要abstract这个关键字的原因。
    似乎这么说:
    这也就是abstract method必须被在 子类中实现的原因了。
      

  9.   

    我这个初学者学的很开心。 :p
    谢谢 
    Patrick_DK(疾风摩郎) !
    lovesnoopy(洋葱头) 
    hushuo(小鬼魂)
    hahaha88(忧郁的眼神,稀嘘的胡子喳) 
    Zhakrin() 
      

  10.   

    to Patrick_DK(疾风摩郎):我争取白天(上午)也上CSDN,哈哈哈哈哈