class Pixel extends Point{
....
  public void clear(){
    super.clear();
    ....
  }
}
按照书上说,调用的方法使用对象的实际类,而不是对象引用的类型。如:
Point point = new Pixel();
point.clear();
clear实际调用了Pixel的clear方法。这里我就有疑问了,Point作为Pixel的父类,point.clear()应该自动向上转型,而调用Point类方法,我以前是学delphi,对对象也有一定了解,我也测试过在delphi里是调用Point类方法的。我现在怀疑是不是我看的java里头写错了,还是什么原因,希望高手帮忙解释一下,如果确实是调用了Pixel的clear方法,这样是不是存在访问权限问题呢?因为Pixel的clear方法是Point的方法扩展,可以访问Pixel下的数据,而point是Point对象,他的clear应该只能访问自己的数据成员,而事实不是,这样总觉得不要理解。

解决方案 »

  1.   

    Point point = new Pixel();
    point.clear();在JAVA中也是调用Pixel的clear方法。
    只是因为子类方法中,
     public void clear(){
        super.clear();
        ....
      }
    所以会调用到父类的方法
      

  2.   

    public class Test12
    { /**
     * @param args
     */
    public static void main(String[] args)
    {
    Point point = new Pixel();
    point.clear(); }}class Point{
    public void clear(){
    System.out.println("Point");
    }
    }class Pixel extends Point{
    public void clear(){
    super.clear();
    System.out.println("Pixel");
    }
    }输出结果:
    Point
    Pixel
      

  3.   

    首先感谢楼上的帮忙解答,可是仅仅理解在这个层面上只要自己写以下程序测试一下就可以。可是这里明显的违反了面向对象上下类型转型的问题,除非java程序都属于晚绑定的(late bingding)
      

  4.   

    Point point = new Pixel();
    point.clear();
    Pixel继承自Point类,这个时候 其实point实际是Pixel类型的,所以point.clear()调用的是Pixel这个类里的clear方法,但是你的Pixel这个类的clear方法里写了super.clear();这样就在Pixel类的clear方法里调用了Point类的clear方法。
    JAVA是运行时绑定的。
      

  5.   

    除非java程序都属于晚绑定的(late bingding)
    -------------------------------------------------
    java就是属于这种,看看thinking in java就有这个解释