有如下程序段: public class Parent { public int addValue (int a,intB){ int s; s=a+b; return

admin2012-12-13  28

问题 有如下程序段:    public class Parent {        public int addValue (int a,intB){            int s;            s=a+b;            return 3;            }    }    class Child extends Parent {}    则下列选项中,可以正确加入类Child中且父类的方法不会被覆盖的是(  )。

选项 A、int addValue (int a,intB){//do something...}
B、public void addValue() {//do something...}
C、public int addValue (int a,intB)throws MyException {//do something...}
D、public float addValue (int a,int b,float b=1.0) {//do someting...}

答案B

解析 此题涉及方法重载(overload)、方法重写(override)以及类派生时方法重写的规则方法重载的规则是:
(1)参数列表必须不同,参数个数不同完全可以,如果个数相同,则参数类型的不同不会引起歧义,例如int和long、float和double就不能作为唯一的类型不同;
(2)返回值可以不同,但是不能是重载时唯一的不同点 (这点和C++中不同,C++中返回类型必须一致)。
方法重写发生在类继承时,子类可以重写父类中已有的方法,必须在返回类型和参数列表一样时才能说是重写,否则就是重载,Java中方法重写的一个重要而且容易被忽略的规则是重写的方法的访问权限不能比被重写的方法的访问权限低!
重写的另一个规则是重写的方法不能比被重写的方法抛出(throws)更多种类的异常,其抛出的异常只能少,或者是其子类,不能以抛出异常的个数来判断种类,而应该是异常类层次结果上的种类。
此题中选项A的错误就是重写的访问权限比被重写的方法的低,而B属于重载,选项C的错误在于比被重写的方法抛弃了更多种类的异常。选项D中,当只传递两个变量的值的时候,系统就不知道到底调用哪个方法了,因为b为常量,可以不指定。所以只有选项B是符合题意的。
转载请注明原文地址:https://kaotiyun.com/show/BU2p777K
0

最新回复(0)