Java面向对象-方法的重载

Java面向对象-方法的重载

 

所谓方法的重载,

类里面有两个或者多个重名的方法,但是方法的参数个数、类型、顺序至少有一个不一样,这时候局构成方法重载;

 

上代码:

 1 package com.java1234.chap03.sec03;
 2  
 3 public class Demo01 {
 4  
 5     int add(int a,int b){
 6         System.out.println("方法一");
 7         return a+b;
 8     }
 9      
10     /**
11      * 方法的重载,参数个数不一样
12      * @param a
13      * @param b
14      * @param c
15      * @return
16      */
17     int add(int a,int b,int c){
18         System.out.println("方法二");
19         return a+b+c;
20     }
21      
22     /**
23      * 方法的重载,参数的类型不一样
24      * @param a
25      * @param b
26      * @return
27      */
28     int add(int a,String b){
29         System.out.println("方法三");
30         return a+Integer.parseInt(b);
31     }
32      
33     /**
34      * 参数类型个数一样,返回值类型不一样 不算重载,直接会报错,说方法重名
35      * @param args
36      */
37     /*long add(int a,int b){
38         return a+b;
39     }*/
40      
41     public static void main(String[] args) {
42         Demo01 demo=new Demo01();
43         System.out.println(demo.add(1, 2));
44         System.out.println(demo.add(1, 2,3));
45         System.out.println(demo.add(1, "3"));
46     }
47 }

运行结果:

方法一
3
方法二
6
方法三
4

这里有个注意点 假如参数个数和类型一样,返回值不一样,不能算重载,直接是编译出错,编译器认为是方法重复了。

具体原因:我们给下实例代码:

 1 package com.java1234.chap03.sec03;
 2  
 3 public class Demo01 {
 4  
 5     int add(int a,int b){
 6         System.out.println("方法一");
 7         return a+b;
 8     }
 9  
10     /**
11      * 参数类型个数一样,返回值类型不一样 不算重载,直接会报错,说方法重名
12      * @param args
13      */
14     long add(int a,int b){
15         return a+b;
16     }
17      
18     public static void main(String[] args) {
19         Demo01 demo=new Demo01();
20         int m=demo.add(1, 2);  // 调用返回值是int类型的方法
21         long n=demo.add(1, 2); // 调用返回值是long类型的方法
22          
23         demo.add(1, 2); // 假如这样些  编译器晕了,你TM是调用返回值是int类型还是long类型的方法
24          
25     }
26 }

假如调用方法 指定返回值类型,我们可以确定是调用的是某个方法,比如int m=demo.add(1,2) 因为是返回值m是int类型 那肯定

调用的是int add(int a,int b){ 方法  long n=demo.add(1, 2) 因为返回值n是long类型,那肯定调用的long add(int a,int b){方法

但是,假如直接 demo.add(1,2); 编译器就SB了,你TM是调用返回值是int类型的方法,还是返回值是long类型的方法;

 

posted on 2016-10-17 12:06  eaglezb  阅读(388)  评论(0编辑  收藏  举报

导航