重写与重载的区别与作用
一、重写(Override)
也就是子类重新编写,或覆盖父类继承下来的方法,也叫方法覆盖,主要用于当父类提供的方法无法满足子类需求时,可在子类中定义和父类相同的方法进行重写。
1.重写的原则:
- 重写必须存在于继承关系中。
- 所重写的方法名称、参数列表要与父类相同。
- 所重写的方法访问修饰符权限,需要比父类的更宽泛或与之相同。(public>protected>default>private)
- 所重写的方法返回值类型,需与父类的返回值类型相同或是其子类。
2.示例
class Animal{
public void eat(){
System.out.println("吃吃吃");
}
}
class Dog extends Animal{
@Override
public void eat()
System.out.println("狗吃狗粮")
}
3.用途
主要用于覆盖重写父类所继承下来的方法,满足子类特殊需求;在接口跟抽象类中是随处可见的方法,也是使用多态的前提。
二、重载(Overload)
重载指的是,在同一个类中有若干个方法,它们都共享同一个方法名,即方法名称相同,但参数列表却各不相同,这种情况叫作方法的重载。其主要用于构造方法居多。
1.重载的原则:
- 方法名称相同,参数列表不同(包括参数的个数,顺序,类型各不相同)
- 方法的重载与方法的访问修饰符与返回值类型无关。
2示例:
public class Test{
public int add(){ //定义add方法,让它们构成重载关系
return 0;
}
public int add(int a,int b){
return a+b;
}
public int add(int a,int b,int c){
return a+b+c;
}
}
在我们创建对象,调用这些方法时,编译器会根据我们传入的参数个数,类型,顺序来进行匹配选择调用哪个方法,这个过程可以理解为动态的。
Test t = new Test();
int a=t.add();
int b=t.add(10,20);
int c=t.add(10,20,30);
//打印输出a,b,c结果分别为0,30,60
3.使用重载的好处
灵活,方便,屏蔽使用差异;当然重载更多的是用于构造函数中,方便我们给对象初始化。