Chapter5_初始化与清理_方法重载

  方法重载是java中编译器在方法调用时采用的一个重要机制。起初方法重载的初衷是方便构造器的调用,比如对于一个类,可以实现用不同的方法来初始化它,又由于构造器的名称都是一样的,所以必须使用到方法重载的机制,并且这种机制不仅限于构造器方法。下面这个例子提供了方法重载的构造器和一般方法的例子。  

 1 class tree{
 2     int height;
 3     tree(){
 4         System.out.println("无参数构造器");
 5     }
 6     
 7     tree(int height){
 8         this.height = height;
 9         System.out.println("带参数构造器 " + height);
10     }
11     
12     public void info(){
13         System.out.println("height " + this.height);
14     }
15     
16     public void info(int height){
17         System.out.println("height " + height);
18     }
19 }
20 
21 public class test {
22     public static void main(String[] args){
23         tree t1 = new tree();
24         tree t2 = new tree(10);
25         
26         t1.info(10);
27         t2.info();
28     }
29 }

  输出如下:

 1 无参数构造器 2 带参数构造器 10 3 height 10 4 height 10 

  上面的例子定义了两对重载的方法,分别是构造器方法和显示一些信息的一般方法,很容易看到,重载方法的区分规则很简单:每个重载方法都要有独一无二的参数类型列表,并且参数顺序不同的方法也可以进行区分。要注意的是,不同的是参数类型列表,这说明类型的顺序必须不同,如果类型顺序相同,仅仅是定义时的变量名不同,这样也是不行的。下面是一些演示。

 1 class tree{
 2     int height;
 3     tree(){
 4         System.out.println("无参数构造器");
 5     }
 6     
 7     tree(int height){
 8         this.height = height;
 9         System.out.println("带参数构造器 " + height);
10     }
11     
12     public void info(String s, int height){
13         System.out.println(s + height);
14     }
15     
16     public void info(int height, String s){
17         System.out.println(s + height);
18     }
19     
20     /*public void info(int height, String s2){
21         System.out.println(s2 + height);
22     }
23     报错!*/
24 }
25 
26 public class test {
27     public static void main(String[] args){
28         tree t1 = new tree();
29         tree t2 = new tree(10);
30         
31         t1.info(10,"height ");
32         t1.info("height ", 10);
33     }
34 }

  输出:

 1 无参数构造器 2 带参数构造器 10 3 height 10 4 height 10 

  这很显然证明了之前的论述,重要的是对参数类型列表的理解。另外需要注意的是用返回值来区分重载方法是不可取的,编译器并未对这个机制提供实现,原因是在编程中,许多人会关注方法的内容,即它们完成了什么事情,而非关注方法的返回值,这被称为“为了副作用而副作用”。

  另一个问题就是在方法重载过程中涉及到的类型转化的问题。如果被传入的数据类型小于方法声明中的参数类型,实际数据类型就会被提升,对于char型如果无法找到接受char型参数的方法,会被提升至int类型。如果方法接受的数据类型比参数列表中声明的小,会通过窄化转化来执行操作。

转载于:https://www.cnblogs.com/buaa-zzy/p/7183579.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值