Java面向对象-方法的重载
所谓方法的重载,
类里面有两个或者多个重名的方法,但是方法的参数个数、类型、顺序至少有一个不一样,这时候局构成方法重载;
上代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
package
com.java1234.chap03.sec03;
public
class
Demo01 {
int
add(
int
a,
int
b){
System.out.println(
"方法一"
);
return
a+b;
}
/**
* 方法的重载,参数个数不一样
* @param a
* @param b
* @param c
* @return
*/
int
add(
int
a,
int
b,
int
c){
System.out.println(
"方法二"
);
return
a+b+c;
}
/**
* 方法的重载,参数的类型不一样
* @param a
* @param b
* @return
*/
int
add(
int
a,String b){
System.out.println(
"方法三"
);
return
a+Integer.parseInt(b);
}
/**
* 参数类型个数一样,返回值类型不一样 不算重载,直接会报错,说方法重名
* @param args
*/
/*long add(int a,int b){
return a+b;
}*/
public
static
void
main(String[] args) {
Demo01 demo=
new
Demo01();
System.out.println(demo.add(
1
,
2
));
System.out.println(demo.add(
1
,
2
,
3
));
System.out.println(demo.add(
1
,
"3"
));
}
}
|
这里有个注意点 假如参数个数和类型一样,返回值不一样,不能算重载,直接是编译出错,编译器认为是方法重复了。
具体原因:我们给下实例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package
com.java1234.chap03.sec03;
public
class
Demo01 {
int
add(
int
a,
int
b){
System.out.println(
"方法一"
);
return
a+b;
}
/**
* 参数类型个数一样,返回值类型不一样 不算重载,直接会报错,说方法重名
* @param args
*/
long
add(
int
a,
int
b){
return
a+b;
}
public
static
void
main(String[] args) {
Demo01 demo=
new
Demo01();
int
m=demo.add(
1
,
2
);
// 调用返回值是int类型的方法
long
n=demo.add(
1
,
2
);
// 调用返回值是long类型的方法
demo.add(
1
,
2
);
// 假如这样些 编译器晕了,你TM是调用返回值是int类型还是long类型的方法
}
}
|
假如调用方法 指定返回值类型,我们可以确定是调用的是某个方法,比如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类型的方法;