题目:类Test1、类Test2定义如下:

题目:类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项正确

你可能感兴趣的:(java学习之路)