如下代码,在所指示的位置插入代码能够正常编译:
class Alpha{ public void bar(int... x){}; public void bar(int x){}; } public class Beta extends Alpha{ //insert code here }
有如下选项:
A: private void bar(int x){} B: public void bar(int x){} C: public int bar(String x){return 1;} D: public Alpha bar(int x){} E: public void bar(int x, int y){} F: public int bar(int x){return x;}
这道题考察的重点在重写,重载是烟幕。
方法重写的特点可以概括为“两同两小一大”。
两同是指:方法名相同,形参列表相同;
两小是指:子类方法的返回值类型要比父类方法的返回值类型更小或相等,子类方法声明抛出的异常类要比父类方法声明抛出的异常类更小或相等;
一大是指:子类方法的访问权限要比父类方法更大或相等(private < default < protected < public)。
此外还有一则限制:重写的方法和父类方法要么都是实例方法,要么都是类方法,不能一个是实例方法一个是类方法,否则会出现编译异常。
重载的特点可以概括为“两同一不同”
两同是指:两个方法在同一个类下,方法名相同;
一不同是指:形参不同。
除此之外,方法重载与返回值类型、修饰符等都没有任何关系。
这道题里仅父类涉及了重载。所以在判断时不需考虑重载的问题。
判断是否可以正确编译可以基于一个非常简单的原则:当方法被调用时,计算机是否会感到疑惑,即发给计算机的指令是否明确。目前计算机都是记过准确计算来执行用户的指令的。倘若用户的指令不够清晰,计算机就会无法判断,计算机无法判断就会停止执行爆出异常。
在上面题目中给出的选项都是方法名相同,只需要判断是否是重写或是新的方法:
A:方法名相同,形参列表相同,像是重写,但是访问权限小于父类方法;
B : 重写,正确;
C : 方法名相同,但形参不同,是新方法;
D:返回值类型错误,错误的重写;
E:形参不同,是新方法;
F:返回值类型的问题,错误的重写;
原文:http://www.cnblogs.com/amunote/p/3809635.html