本帖最后由 alice_sg 于 2013-11-08 10:47:58 编辑

解决方案 »

  1.   

    第一题你去掉参数float d?还会编译通过?
      

  2.   

    先搞清楚什么是重写,什么事重载。
    子类重写父类的方法,所有东西必须一致。
    而重载的话参数类型或者个数要不同
    第二题class Parent {
    public int change(){
    return 0;
    }
    }class Child extends Parent{
    public int change(){
    return 0;
    }
    }
      

  3.   

    你的第一题不是重写,是重载。因为父类并没有带参数的getNum(float d)方法。
    第二题是重写父类Parent的方法,所以返回值必须相同。重载与方法返回值无关。
      

  4.   

    方法重写要求,子类和父类的方法名、参数列表、返回值类型都要一样;
    方法重载要求,在同一个类中,方法名相同、参数列表、返回值不相同。第二题把double改成int
      

  5.   

    方法重写要求,子类和父类的方法名、参数列表、返回值类型都要一样;
    方法重载要求,在同一个类中,方法名相同、参数列表、返回值不相同。第二题把double改成int方法重写要求,子类和父类的方法名、参数列表、返回值类型都要一样;
    方法重载要求,在同一个类中,方法名相同、参数列表、返回值不相同。第二题把double改成int
    那为什么第一题又可以编译通过呢?
      

  6.   

    方法重写要求,子类和父类的方法名、参数列表、返回值类型都要一样;
    方法重载要求,在同一个类中,方法名相同、参数列表、返回值不相同。第二题把double改成int方法重写要求,子类和父类的方法名、参数列表、返回值类型都要一样;
    方法重载要求,在同一个类中,方法名相同、参数列表、返回值不相同。第二题把double改成int
    那为什么第一题又可以编译通过呢?第一题参数不同啊!!
      

  7.   

    方法重写要求,子类和父类的方法名、参数列表、返回值类型都要一样;
    方法重载要求,在同一个类中,方法名相同、参数列表、返回值不相同。第二题把double改成int方法重写要求,子类和父类的方法名、参数列表、返回值类型都要一样;
    方法重载要求,在同一个类中,方法名相同、参数列表、返回值不相同。第二题把double改成int
    那为什么第一题又可以编译通过呢?第一题参数不同啊!!
    第一题是重载,参数不一样和返回值没关系!
      

  8.   

    方法重写要求,子类和父类的方法名、参数列表、返回值类型都要一样;
    方法重载要求,在同一个类中,方法名相同、参数列表、返回值不相同。第二题把double改成int方法重写要求,子类和父类的方法名、参数列表、返回值类型都要一样;
    方法重载要求,在同一个类中,方法名相同、参数列表、返回值不相同。第二题把double改成int
    那为什么第一题又可以编译通过呢?第一题参数不同啊!!
    两道题不都是方法重写吗?为什么重写的方法可以允许参数不同
      

  9.   

    方法重写要求,子类和父类的方法名、参数列表、返回值类型都要一样;
    方法重载要求,在同一个类中,方法名相同、参数列表、返回值不相同。第二题把double改成int方法重写要求,子类和父类的方法名、参数列表、返回值类型都要一样;
    方法重载要求,在同一个类中,方法名相同、参数列表、返回值不相同。第二题把double改成int
    那为什么第一题又可以编译通过呢?第一题参数不同啊!!
    两道题不都是方法重写吗?为什么重写的方法可以允许参数不同我擦,你还是去看下【重写】和【重载】的区别。你还没明白这两个的区别。
    简单的你记住重写就是覆盖的意思,你就理解子类覆盖了父类的方法,调用的话就直接调子类的方法。父类的不会调了。
    重载是一个方法可以有多种参数,调用的时候根据你的参数不同调用不同的方法。
    第一题,
    new Sub().getNum()//这是调用父类的方法
    new Sub().getNum(1.0f)//这是调用子类的方法
      

  10.   

    继承重写条件
    1.访问权限不能比父类大(比如父类protected,你子类不能为public)
    2.重写要确保:返回类型,方法名,参数名要和被重写的方法一致
    3.子类抛出的异常不能超过父类相应方法抛出的异常你第一题里可以编译的原因:
    子类:public double getNum(float d){}
    父类:public float getNum(){}编译器识别。
    方法名一样,参数不一样
    编译器不认为你在子类里重写了父类里面的方法,编译器认为是子类的特有方法。你第二题里可以不能编译的原因:
    子类: public int change(){}
    父类:public double change(){{}
    方法名一样,参数一样
    编译器认为你在子类里重写了父类里面的方法,但是你的返回类型不一致,就报错了。