程序如下:
class Fruit {
boolean zestySkin= false;
protected void f()
{
System.out.println("Fruit.f()");
}
}
public class Citrus extends Fruit {
boolean zestySkin= true;  
public void f()
{
super.f();
System.out.println("Citrus.f()");

public static void main (String args[]) {
Citrus c = new Citrus();
((Fruit)c).f();
}
}
结果是:Fruit.f()
       Citrus.f()
疑问:c对象已经转换成Fruit类了,再次调用f()函数,应该执行此函数在Fruit类中的定义,那输出就应该是Fruit.f()啊。为什么还有Citrus.f()那?
求助高手指点哦!谢谢

解决方案 »

  1.   

    这是java的多态
    Citrus c = new Citrus(); 
    ((Fruit)c).f(); 

    Fruit c = new Citrus(); 
    c.f();
    是一样的,c仍然是Citrus的对象
      

  2.   

    由于Fruit,Citrus 的父子类关系,c仍然是Citrus的对象,这叫父类引用指向子类对象~~~~
      

  3.   

    看看这个帖子。
    http://topic.csdn.net/t/20040928/10/3414894.html
    关于向下转型和强制类型转换
      

  4.   

    看看这个帖子。
    http://topic.csdn.net/t/20040928/10/3414894.html
    关于向下转型和强制类型转换
      

  5.   

     我怎么发了两遍?看来这个时间段访问csdn的人真多啊。