`

详解Java重载(Overload)

阅读更多
   重载(Overload)
   覆盖(Override)
今天的重点主要是讲重载(Overload)。
什么叫重载?
简单的说:重载允许你在一个类中定义多个同名的方法,我可以在一个类里面定义好多方法,
这些方法的名字是相同的, 什么地方不一样呢?参数表一定不同.

对于修饰符,对返回值,抛出的异常都没有什么限制,根返回值类型一点关系都没有。

只要方法名相同,参数表不同,这就叫方法的重载(Overload)。

  • 什么叫做参数表不同?

1、参数的个数不相同  
2、参数的个数虽然相同,但是参数的类型不相同
3、参数类型的排列不同 
4、形参(形式参数)名不同 ×

 
public void study(){
    System.out.println("study()");
  }
  //1、参数的个数不相同 √
  public void study(int a){
    System.out.println("study(int)");
  }
  //2、参数的个数虽然相同,但是参数的类型不相同 √
  public void study(double d){
    System.out.println("study(double)");
  }
  public void study(int a ,double d ){
    System.out.println("study(int,double)");
  }

   //3、参数类型的排列不同 √
  public void study(double a,int b){
    System.out.println("study(double,int)");
  }
   
  /*4、形参(形式参数)名不同  错误 ×
   public void study(double c,int d){
    System.out.println("study(double,int)");
  }*/






  • 调用方法的时候,根据什么来找到合适的方法?

显然会根据你给的参数,调哪个方法由你给的参数来决定。

  • 在调用哪个方法,是在什么时候决定?
[size]
是在编译期间决定,这是关于方法重载一个很重要的特点,到底要调用哪一个方法是由
编译器在编译的时候根据参数,根据参数类型 决定,换句话说在我们javac 编译的时候要调用哪个方法就已经确定下来了。在我们编译的时候就已经确定下来了。


方法重载还有一个好听的名字叫编译时多态。

我们说每当我们见到一个面向对象的语法,总是要揪出他背后的思想,
为什么有这个语法,如何通过这个语法来表现体现出面向对象的思想呢,
我们来看下方法重载的概念,他的思想的概念!
貌似这个方法其实没有必要设置重载,我换个名不就完了吗?
我拿名字就可以把不同的方法区分开了,我干嘛要方法名相同,参数表不一样呢?

为什么不换个名字,取不同的名字,我拿名字就可以把不同的方法给区分开了?

方法的声明代表他能做什么!
方法的实现代表着他怎么做!


[size=medium]
  • 什么叫方法?

你会干什么,
你的功能,
你的行为就是你的方法。

  • 为什么不通过方法名来区分?

方法是什么?方法是一个对象的功能,这个方法最终是留给其他对象去调用

比如说b有一个吃方法,由a去调用,a调用b的吃方法,换句话讲就是a让b吃。
a--调用-->b 的吃方法。

1、如果b中两方法的方法名不一样,那么这两个方法的差异要由谁来控制?
由a来控制,a要选择对b具体的调用方法。

2、而如果这两个方法都是吃,那么这两个方法的差异要由谁来控制?
我就对b调用一个吃方法,b要根据a给的东西(参数)自己选择一个合适的吃方法。

各司其职: 对象负责把东西(参数)给 方法 , 方法自己选择合适的处理方法。

重载的作用: 把一个对象同类方法,由于参数不同造成的差异,对于对象的调用者或者叫对想的使用者屏蔽。


方法重载最著名的应用就是System.out.println()/print()都是重载的方法;
java.lang.Object
  |-java.io.OutputStream
      |-java.io.FilterOutputStream
          |-java.io.PrintStream 类的out对象的println()方法!






























分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics