一、重载(Overload)
重载函数是函数的一种特殊情况,为方便使用,Java允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。
特点:
1.重载就是多个方法使用一个方法名,但是参数的个数或类型不同,但他们的作用一般是相同的 。
2.可以通过传递不同的参数实现相同的效果。
3.发生在两个或者是更多的函数具有相同的名字的情况下。
特征:在同一个类中,函数名相同,参数列表不同,访问修饰符、返回类型不管。
例如我们在类中写一个无参构造函数和有参构造函数完成不同的赋值。
public class Overload {
private String name;
private int age;
public Overload() {}//无参构造函数
public Overload(String name,int age) {//有参构造函数
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Overload ol1 = new Overload();
Overload ol2 = new Overload("牛二",18);
}
}
二、重写(Override)
在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法的覆盖。
特征:一般在两个类中(必须是父子类的关系),返回类型、函数名、参数列表都相同,方法体不同,访问修饰符父类比子类更严格,也就是说子类的访问修饰符应大于等于父类的访问修饰符。
注:重写也可以发生在接口或实现类等。被final修饰的方法不可以被重写。
class Father {
public void enjoy1() {
System.out.println("father");
}
}
public class Override extends Father{
public void enjoy1() {
System.out.println("Override");
}
public static void main(String[] args) {
Father f = new Override();
f.enjoy1();
}
}
总结:在名字上两者容易混淆,要搞懂两者在什么地方出现,以及作用。要分清他们就可以靠两句话。对于重载,函数名相同,参数列表不同,返回类型和访问修饰符不管。对于重写,函数名、参数列表、返回类型相同,方法体不同,父类访问修饰符更严格。