7 public class Parent {
public int addValue( int a, int b) {
int s;
s = a+b;
return s;
}
}
class Child extends Parent {
}
选项中__B____方法可以正确加入类Child中且父类的方法不会被覆盖。
A、int addValue( int a, int b ){// do something...}
B、public void addValue (){// do something...}
C、public int addValue( int a, int b )throws MyException {//do something...}
D、public float addValue ( int a ,int b, float b=1.0 ){// do something...}
解析:此题涉及方法重载(overload),方法重写(override)以及类派生时方法重写的规则。方法重载的规则是:
一、参数列表必须不同,个数的不同完全可以,如果个数相同,则参数类型的不同不会引起歧意,例如int和long,float和double就不能作为唯一的类型不同;
二、返回值可以不同,但是不能是重载时唯一的不同点(这点和c++中不同,c++中返回类型必须一致)。
方法重写发生在类继承时,子类可以重写一个父类中已有的方法,必须在返回类型和参数列表一样时才能说是重写,否则就是重载,java中方法重写的一个重要而且容易被忽略的规则是重写的方法的访问权限不能比被重写的方法的访问权限低!
重写的另一个规则是重写的方法不能比被重写的方法抛弃(throws)更多种类的异常,其抛弃的异常只能少,或者是其子类,不能以抛弃异常的个数来判断种类,而应该是异常类层次结果上的种类。
此题中选取项A的错误就是重写的访问权限比被重写的方法的低,而B属于重载,选项C的错误在于比被重写的方法抛弃了更多种类的异常。选项D中,当只传递两个变量的值的时候,那系统就不知道倒底调用哪个方法了,因为b为常量,可以不指定,所以只有选项B是符合题意的。
8 假设有以下代码
String s= "hello";
String t = "hello";
char c[] = {’h’,’e’,’l’,’l’,’o’} ;
下列选项中返回false的语句是 B 。
A、s.equals(t); B、t.equals(c); C、s==t; D、t.equals(new String("hello"));
解析:==操作符比较的是操作符两端的操作数是否是同一个对象,而String的equals()方法比较的是两个String对象的内容是否一样,其参数是一个String对象时才有可能返回true,其它对象都返回假。需要指出的是由于s和t并非使用new创建的,他们指向内存池中的同一个字符串常量,因此其地址实际上是相同的(这个可以从反编译一个简单的测试程序的结果得到,限于篇幅不列出测试代码和反编译的分析),因此答案C也是正确的。