这样一个程序,答案15.0,8.0
class A{
double f(double x,double y)
{
return x+y;
}
}
class B extends A
{
double f(int x,int y)
{
return x*y;
}
}public class Example7 { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
B b=new B();
System.out.println(b.f(3,5));
System.out.println(b.f(3.0,5.0));
}}
15.0这个答案我能理解,8.0啦?类B不是重写了类A的方法了吗,那么b.f(3.0,5.0)调用double f(int x,int y)这个方法,return x*y 不还是15.0吗?

解决方案 »

  1.   

    方法的重载吧;方法重载是让类以统一的方式处理不同类型数据的一种手段。Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法, 这就是多态性
      

  2.   


    class B extends A
    {
    double f(double x,double y)
    {
    return x+y;
    }double f(int x,int y)
    {
    return x*y;
    }
    }简单的去理解这个问题
    把B类中看作有2个方法
    b.f(3,5)中3和5是Int型那自然选择方法double f(int x,int y)(b.f(3.0,5.0)中3.0和5.0是double 型自然选择方法double f(double x,double y)
    结果就是你看到的结果。
    不自然我把问题简单话,能否理解。
      

  3.   

    double f(int x,int y)
    因为你的数据类型是整形的
    System.out.println(b.f(3.0,5.0));
    调用的是浮点型的
    这样就没办法用子类的方法  但是可以继承父类的方法