可以限制一个方法重载的声明语句有( )。
A. Final void methoda() {}
B. Void final methoda() {}
C. Static void methoda() {}
D. Static final void methoda() {}
E. Final abstract void methoda() {}
解答:A, D
知识点列表:5.1 Java方法的重载;构造函数继承与重载的含义。这道题很是难以理解。难道有什么样的方法不能进行重载?
这个重载可以理解为两种模式:
1、在同一个类中的方法重载;
2、子类重载父类的同名方法。对于模式1,有如下代码可以通过编译并执行public class Test { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub System.out.println("OK!");
new Test().go();
}
public void go() {
methoda();
methoda(0);
}
public static final void methoda() {
System.out.println("Original!");}
public void methoda(int a) {
System.out.println("New!");
}}对于模式2,有如下代码可以通过编译并执行class Father {
public static final void methoda() {
System.out.println("Father!");}
}
public class Test extends Father{ /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub System.out.println("OK!");
new Test().methoda();
new Test().methoda(0);
}
public void methoda(int a) {
System.out.println("OK!");
}}
这不是照样重载了吗?求解!!!
A. Final void methoda() {}
B. Void final methoda() {}
C. Static void methoda() {}
D. Static final void methoda() {}
E. Final abstract void methoda() {}
解答:A, D
知识点列表:5.1 Java方法的重载;构造函数继承与重载的含义。这道题很是难以理解。难道有什么样的方法不能进行重载?
这个重载可以理解为两种模式:
1、在同一个类中的方法重载;
2、子类重载父类的同名方法。对于模式1,有如下代码可以通过编译并执行public class Test { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub System.out.println("OK!");
new Test().go();
}
public void go() {
methoda();
methoda(0);
}
public static final void methoda() {
System.out.println("Original!");}
public void methoda(int a) {
System.out.println("New!");
}}对于模式2,有如下代码可以通过编译并执行class Father {
public static final void methoda() {
System.out.println("Father!");}
}
public class Test extends Father{ /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub System.out.println("OK!");
new Test().methoda();
new Test().methoda(0);
}
public void methoda(int a) {
System.out.println("OK!");
}}
这不是照样重载了吗?求解!!!
public void methoda(int a) {
System.out.println("OK!");
}
这个是重载,不是重写。重写参数要一样。
重写是子类继承超类后将超类中不是final和private的方法进行重新实现。参数列表,返回值一摸一样,可见域只能变大,抛出异常不能比超类方法大。
重载是在同一类中实现的,就是方法名相同,参数列表不用。
重载只和方法入参的个数、顺序有关。和修饰符(比如:public、 static)、抛出异常、返回值类型不关。
那么重写只能出现在继承机制中,这题就没什么问题了。
父类的 public final void methoda() {}方法在子类中无法重写,即重写被限制了。只要是final的方法不能被子类所改变。故选AD太相信这大赛组委会了,这错误都存在几年了,也不改改!
[/Quote]第二个是子类重载从父类继承来的同名方法,参数列表不同,不是重写。
重写Override是父类与子类之间多态性的一种表现,重载Overload是一个类中多态性的一种表现。这点我以前还没意识到,谢谢大家!