可以限制一个方法重载的声明语句有(    )。
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!");
}}
这不是照样重载了吗?求解!!!

解决方案 »

  1.   

    我觉得楼主说的有道理的,这道题目出的有很大问题,我们说的方法重载有两种,一个类的同名方法参数列表不同,这个是无论如何都无法限制的;第二个是子类重写父类的同名同参的方法,这个是可以通过final关键字限制不能被子类重载。我觉得这道题只能问,哪一个选项能限制 方法的重写而不是重载
      

  2.   

    楼主你这2个例子就是错的。去看看java的重写和重载
      

  3.   

    final 修饰的不能重写override,不是不能重载overload。 
    public void methoda(int a) {
            System.out.println("OK!");
    }
    这个是重载,不是重写。重写参数要一样。
      

  4.   

    楼主可能就是没有分清重写和重载的区别。
    重写是子类继承超类后将超类中不是final和private的方法进行重新实现。参数列表,返回值一摸一样,可见域只能变大,抛出异常不能比超类方法大。
    重载是在同一类中实现的,就是方法名相同,参数列表不用。
      

  5.   

    题目出错了吧,可能打错字了,应该是限制重写。
    重载只和方法入参的个数、顺序有关。和修饰符(比如:public、 static)、抛出异常、返回值类型不关。
      

  6.   

    如果把题目中的“重载”改为“重写”
    那么重写只能出现在继承机制中,这题就没什么问题了。
    父类的 public final void methoda() {}方法在子类中无法重写,即重写被限制了。只要是final的方法不能被子类所改变。故选AD太相信这大赛组委会了,这错误都存在几年了,也不改改!
      

  7.   

    我觉得楼主说的有道理的,这道题目出的有很大问题,我们说的方法重载有两种,一个类的同名方法参数列表不同,这个是无论如何都无法限制的;第二个是子类重写父类的同名同参的方法,这个是可以通过final关键字限制不能被子类重载。我觉得这道题只能问,哪一个选项能限制 方法的重写而不是重载
    [/Quote]第二个是子类重载从父类继承来的同名方法,参数列表不同,不是重写。
      

  8.   

    Java中override和overload的区别:
    重写Override是父类与子类之间多态性的一种表现,重载Overload是一个类中多态性的一种表现。这点我以前还没意识到,谢谢大家!