This question already has answers here:
Java overloading and overriding
                            
                                (9个答案)
                            
                    
                2年前关闭。
        

    

我有一个类BindingSample带有不带参数的方法

public class BindingSample {
  public void printMsg(){
      System.out.println("Binding Sample no parameter");
  }
}




另一个类扩展BindingSample并使用相同的方法签名,但向其中添加一个参数

public class application extends BindingSample {

  public void printMsg(int i){
        System.out.println("Changed my value " + i);
  }

  public static void main(String[] args) {
        application app = new application();
        app.printMsg(5);
  }
}


输出更改为我的值5

即使参数不同,为什么仍能正常工作?为什么称之为超载?我不认为这是最重要的,因为要重写一个方法,方法签名及其参数应该相同。

最佳答案

即使参数不同,为什么仍能正常工作?


您的application类具有一个printMsg方法,该方法采用单个int参数。因此app.printMsg(5)起作用。

请注意,进行以下更改将导致您的代码不通过编译:

BindingSample app = new application();
app.printMsg(5);


从现在起,编译器无法在带有printMsg参数的BindingSample类中找到int方法。


  为什么称之为超载?我不认为这是最重要的,因为要重写一个方法,方法签名及其参数应该相同


覆盖和重载是两个不同的概念。

当多个方法共享相同的名称但具有不同数量的参数或不同类型的参数时,将发生方法重载。

您的application类有两个printMsg方法(一个是从其父类继承的),它们的参数数量不同。因此,这就是方法重载。

10-08 16:09