日期:2014-05-20  浏览次数:20696 次

大家好,小弟又来询问
这样一个程序,答案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吗?

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

class B extends A
{
double f(double x,double y)
{
return x+y;
}

double f(int x,int y)
{
return x*y;
}
}

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