日期:2014-05-18  浏览次数:20849 次

求指导,方法重写的问题
本帖最后由 alice_sg 于 2013-11-08 10:47:58 编辑
做练习的时候有道题目是这样的,
为什么第一题可以编译通过,而第二题不可以呢?
不是说在重写的时候参数返回值都要一致的吗?
不理解。。。求解答。。


代码如下:
第一题:

class Super {
public float getNum(){
return 3.0f;
}
}


public class Sub extends Super{
public double getNum(float d){
return 0.0d;
}
}



第二题:

class Parent {
public int change(){
return 0;
}
}

class Child extends Parent{
public double change(){
return 0;
}
}



------解决方案--------------------
引用:
继承重写条件
1.访问权限不能比父类大(比如父类protected,你子类不能为public)
2.重写要确保:返回类型,方法名,参数名要和被重写的方法一致
3.子类抛出的异常不能超过父类相应方法抛出的异常

你第一题里可以编译的原因:
子类:public double getNum(float d){。。。}
父类:public float getNum(){。。。}

编译器识别。
方法名一样,参数不一样
编译器不认为你在子类里重写了父类里面的方法,编译器认为是子类的特有方法。

你第二题里可以不能编译的原因:
子类: public int change(){。。。}
父类:public double change(){{。。。}
方法名一样,参数一样
编译器认为你在子类里重写了父类里面的方法,但是你的返回类型不一致,就报错了。


希望对你有用,哪些写的不好,请多多包涵