我想请问一下红色字体部份的程序,为什么上一句的方法重写是错误的,下一句为什么是方法重写?class Chengji
{
        float f(float x,float y)
        {
                return x*y;
         }
}
class Xiangjia extends Chengji
{
         float f(float x,float y) //方法的重写,方法的名字,返回值类型,参数个数和类型与父类完全相同
        {
                return x+y ;
        }
        //float f(float,x,int y) {return x-y;}错误的语句,在方法名相同的情况下既不属于"重写"也不属于"重载"
        //float f(int x,int y,int z){z=x-y; return z;}方法的重写,琢磨一下定义就知道了

}
public class Example
{
        public static void main(String args[])
        {
                Xiangjia sum;
                sum=new Xiangjia();
                float c=sum.f(4,6);//调用的是子类里的f(),因为子类重写了父类的f()
                //c=sum.f(1,2,3); 这个则是调用了重载的函数;当然具体调用那个要根据实参的个数和类型来判断
                System.out.println(c);
        }
}

解决方案 »

  1.   

    因为你没有在父类前面加abstract关键字
    你要被重写的方法也要加abstract
    而且要被重写的方法应该是一个空的方法
    在你这里应该是
    abstract class Chengji 

            /*float f(float x,float y) 
            { 
                    return x*y; 
            }*/
            abstract void f(){
            }

    只有这样 你的方法才能被任意重写
      

  2.   

    文字游戏?
    上一句的方法参数类型不同,当然不是重写了。
    下一句通过传入三个参数,函数的功能不同了,所以叫重写了那个函数?汗具体也不知道怎么说了。。话说楼上 abstract void f() {}
    应该是abstract void f();不能有函数体的。
      

  3.   

    怎么这么多搞笑的人.
    //float f(float,x,int y) {return x-y;}错误的语句,在方法名相同的情况下既不属于"重写"也不属于"重载" float ,x 这能不错吗?
    float f(float x,int y) {return x-y;}肯定是重载.f(4f,6)调用的就是子类方法,因为参数是float,int.f(4f,6f)一定是父类方法,因为float,float父类一定要加abstract什么乱七八糟的东西怎么想得出来的
      

  4.   

    //float f(float,x,int y) {return x-y;}错误的语句,在方法名相同的情况下既不属于"重写"也不属于"重载" 
    //float f(int x,int y,int z){z=x-y; return z;}方法的重写,琢磨一下定义就知道了 这个方法就声明错了啊 老大f(float,x,int y)改为f(float x,int y)试试