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类型的方法;