public class B{
  public int f(int i){
    return i;
  }
}public class c extends B{
  public int f(int i){
    return super.f(i);
  }
  public double f(double d){
    return d;
  }  public static void main(String[] args){
    B x = new C();
  }
}
请问x能不能调用c中的f(double d)方法?我测试的结果是不行,为什么?

解决方案 »

  1.   

    强制类型转换后再调用
    B x = new C();
    ((C)x).f(...);
      

  2.   

    因为编译器要检查你的形式类型也就是B x这个类里面是否有你要调用的函数,而解释器要在你的实际类型也就是new C()中是否有这个函数,这个就是多态产生的原因,而你在类B中没有定义
    f(double d)方法,所以通不过.你可以在类B中定义一下这个方法,或者按楼上的要进行强制类型转换!
      

  3.   

    对,如果不进行强制类型转换的话,B中必须有这个函数,否则编译会通不过的.如果B中有这个函数,而C中没有这个函数,那么将调用B中的函数.如果B中有这个函数,C中也有这个函数,则调用C中的这个函数了!