方法的重载前提条件:1.同一个类中 2方法名必须相同 3方法的参数列表不同(顺序不同和类型不同)4.不能以返回值作为重载的区分标准
1.
public int getSum(int i,int j){
return i + j;
}
//定义三个int型变量的和
2.
public int getSum(int i,int j,int k){
return i + j + k;
}
3.
//定义两个double型数据的和
public double getSum(double d1,double d2){
return d1 + d2;
}
4.
//定义三个double型数组的和
public void getSum(double d1,double d2,double d3){
System.out.println(d1 + d2 + d3);
}
5.
public void method1(int i,String str){
}
public void method1(String str1,int j){
}
曾看到过一个问题, 当重载的返回值类型可不可以不相同, 我的理解是如果参数列表不相同,那么返回值类型当然可以不相同
如果参数列表的顺序和类型都相同,那么返回值类型不能不相同,粗俗的理解---是因为调用的时候参数类型相同会分不清调用的是有返回值类型还是没有返回值类型。
例如 public void test(int a ,boolean b)
public Test test(int a, boolean b)
调用的时候都是 object .test(a,b);
object.test(a,b);
可变个数的形参的方法:
* 1.格式:对于方法的形参: 数据类型 ... 形参名
* 2.可变个数的形参的方法与同名的方法之间构成重载
* 3.可变个数的形参在调用时,个数从0开始,到无穷多个都可以。
* 4.使用可变多个形参的方法与方法的形参使用数组是一致的。
* 5.若方法中存在可变个数的形参,那么一定要声明在方法形参的最后。
* 6.在一个方法中,最多声明一个可变个数的形参。
//如下四个方法构成重载
//在类中一旦定义了重载的可变个数的形参的方法以后,如下的两个方法可以省略
// public void sayHello(){
// System.out.println("hello world!");
// }
// public void sayHello(String str1){
// System.out.println("hello " + str1);
// }
//可变个数的形参的方法
public void sayHello(String ... args){
for(int i = 0;i < args.length;i++){
System.out.println(args[i] + "$");
}
//System.out.println("=====");
}
public void sayHello(int i,String ... args){
//public void sayHello(String ... args,int i){
System.out.println(i);
for(int j = 0;j < args.length;j++){
System.out.println(args[j] + "$");
}
}
public void sayHello1(String[] args){
for(int i = 0;i < args.length;i++){
System.out.println(args[i]);
}
}
方法的覆盖的前提条件:1.是继承关系,参数列表必须完全与被重写方法相同
2.返回类型必须完全与被重写方法相同
3.访问权限不能比父类中的被重写方法更低。
4.父类成员的方法只能被它的子类重写
5.生命final 方法不能被重写
6.static方法不能被重写
7.重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是重写的方法不能抛出新的异常,或者比
被重写方法更广泛的强制性异常。