第一题
正确答案为:B
解析
继承父类或者实现接口时满足两同两小一大原则:
- 方法名相同,参数类型相同
- 子类返回类型小于等于父类方法返回类型,
- 子类抛出异常小于等于父类方法抛出异常,
- 子类访问权限大于等于父类方法访问权限。
什么叫做子类返回类型小于父类方法返回类型呢?
举例子示范
public class TestOverRide {
public Long test() {
return null;
}
}
public class Test extends TestOverRide {
@Override
public LongChild test() {
return null;
}
}
public interface Long {
}
public class LongChild implements Long {
}
此时虽然覆盖重写了test方法,但是返回值类型为父类返回值类型的一个子类,这就叫子类返回类型小于等于父类方法返回类型
补充
本题是问关于接口,实现接口方法的约束和子类覆盖父类方法的约束基本上是一样的,但接口有一点特殊的地方是接口的方法默认是public abstract,所以在实现接口方法的时候,也必须使用public
“子类抛出异常小于等于父类方法抛出异常”——不管父类抛出何种异常,子类可以不抛出任何异常。同样的,如果接口方法定义抛出某种异常,在实现这个接口方法的时候,可以抛出小于等于接口方法异常的异常,也可以不抛出任何异常。
总结
该题考察了继承或者实现的时候,覆盖重写的方法应该如何写,涉及到了方法的权限修饰符范围、抛出的异常范围、返回值范围
第二题
该题的正确答案选择:A
解析
在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象。所以所谓的继承使子类拥有父类所有的属性和方法其实可以这样理解,子类对象确实拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但不能使用。就像有些东西你可能拥有,但是你并不能使用。所以子类对象是绝对大于父类对象的,所谓的子类对象只能继承父类非私有的属性及方法的说法是错误的。可以继承,只是无法访问到而已。
总结
该题考查了继承中子类在内存中其实包含一个完整的父类对象,也就是如果认为继承知识继承了父类的一部分东西的话,那就大错特错了
第三题
认为该题中的类指的是内部类
解析
因为普通类也就是外部类,通过 eclipse 的警告“Illegal modifier for the class Test; only public, abstract & final are permitted” 可知只能用 public, abstract 和 final 修饰。
内部类则可以用 修饰成员变量的修饰符修饰内部类,比如 private, static, protected 修饰。
总结
该题考查了内部类能使用哪一些权限修饰符