1.重载的概念:
----->在同一个类中,允许存在同名函数,但它们的zhi参数个数或者参数类型不同即可。
public static void main(String[] args){
System.out.println(add(1,2));
System.out.println(add(1.11,2.22));
}
//返回一个int类型相加的和
public static int add(int a, int b){
return a + b;
}
//返回一个double类型想加的和
public static double add(double a, double b){
return a + b;
}
重载,在一个类定义中,可以编写几个同名的方法,但是只要它们的签名参数列表不同,Java就会将它们看做唯一的方法。简单的说,一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。
重写就是子类重写了父类的方法。
比如:
class Fu{
int num = 3;
}
class Zi extends Fu{
int num = 5;
}
这时候Zi类继承了Fu类,也拥有了num,这时候输出num,JVM(虚拟机)会先去Fu类中查找,输出Fu类中的num,但是Zi类有num,所有在运行Zi类的时候重写了num的值,输出5
这里附上总结:
Overload 特点
1、重载时通过不同的参数样式来区分。例如,不同的参数类型,不同的参数个数,不同的参数顺序)
2、不能通过方法访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
4、对于继承来说,如果基类方法的访问权限为private,那么就不能再派生类中进行重载,只是一个新的方法而已。
Override 特点:
1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
4、方法被定义为final不能被重写;
5、对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类对其进行重写 覆盖,如果定义的话,也只是定义了一个新方法,而不会达到重写覆盖的效果。(通常存在于父类和 子类之间。)
重载(overload)和覆盖(override)主要区别:
1)覆盖是子类和父类之间的关系,是垂直关系;重载是同一个类中多个方法的联系属于水平的关系;
2)覆盖只能由一个方法或一对方法产生关系,重载是多个方法之间的联系;
3)覆盖要求参数列表相同;重载要求参数列表不同;
4)覆盖关系中,调用方法体是根据对象的类型(对象对应存储空间决定的);而重载是根据调用时的实参表与形参表来选择方法体的。