题目:类Test1、类Test2定义如下:
public class Test1
{public float aMethod(float a, float b) throws
IOException { }
}
public class Test2 extends Test1{
}
将以下哪种方法插入行6是不合法的。()
A、float aMethod(float a,float b){}
B、public int aMethod(int a,int b) throws Exception(){}
C、public float aMethod(float p,float q){}
D、public int aMethod(int a,int b) throws IOException{}
结果:A
在解释每个选项之前,先说明一下方法重写要求什么?
子类方法相比于父类方法:方法签名(方法名称+参数列表(包括方法参数的数目、顺序、类型,和参数名称无关))必须相同、方法返回值可以相同,也可以是子类型、访问权限可以相同,也可以更大、父类不抛出异常,子类也不能抛出异常,父类抛出异常,子类抛出的异常可以相同,也可以更小,甚至可以不抛出异常
A:如果没有写可访问控制符(访问权限),那就是默认的,一般认为是friendly,不过不能写成friendly,毕竟写出来就会报错,从上面的方法重写要求可以知道,子类的访问权限只能大于等于父类的权限,由于默认的访问权限比public小,所以A项不合法
B:通过方法重写的要求来看,该项不符合方法重写的定义,所以该方法就不是重写的方法,而是子类自己独有的方法,既然都不是方法重写,那怎么会因为方法重写报错呢,所以B项合法
C:从上面的方法重写要求来看,子类可以不抛出异常,所以 C项合法
D:这个和B项一样,根本就不是方法重写,所以D项正确