重写与重载的区别与作用

一、重写(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.使用重载的好处
灵活,方便,屏蔽使用差异;当然重载更多的是用于构造函数中,方便我们给对象初始化。

三、总结

相同点:方法名称都要保持相同;

不同点:重载中,参数列表(个数,类型,顺序)要保证不同,而重写中参数列表要保持相同;重载与方法的访问修饰符,返回值类型无关,而重写中,方法的访问修饰符权限必须与父类方法中的相同或是权限比其更宽泛,返回值类型要么与父类相同要么是父类(返回值类型)的子类。重载也称编译时的多态,重写也称运行时的多态。