1. 重载(Overload)
class="java">
重载(Overload)是在一个类里面,方法名字相同,而参数不同。
返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。
1. 被重载的方法必须改变参数列表(参数个数或类型不一样);
2. 被重载的方法可以改变返回类型;
3. 被重载的方法可以改变访问修饰符;
4. 被重载的方法可以声明新的或更广的检查异常;
5. 方法能够在同一个类中或者在一个子类中被重载;
6. 无法以返回值类型作为重载函数的区分标准;
public class OverloadTest{
public int add(int a ,int b){
return a + b;
}
public int add(int a, int b, int c){
System.out.println(add(a, b));
return a + b + c;
}
public static void main(String[] args){
OverloadTest test = new OverloadTest();
int result = test.add(1, 2);
int result2 = test.add(1, 2, 3);
System.out.println(result);
System.out.println(result2);
}
}
2. 重写(Override)
重写(Override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。
重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法,当需要在子类中调用父类的被重写方法时要使用super关键字。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。
1. 参数列表必须完全与被重写方法的相同;
2. 返回类型必须完全与被重写方法的返回类型相同;
3. 访问权限不能比父类中被重写的方法的访问权限更低;
4. 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常;
5. 声明为final的方法不能被重写;
6. 声明为static的方法不能被重写,但是能够被再次声明;
7. 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法;
8. 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法;
9. 父类的成员方法只能被它的子类重写;
10. 构造方法不能被重写;
11. 如果不能继承一个方法,则不能重写这个方法;
public class InheritenceTest3{
public static void main(String[] args){
Son son = new Son();
}
}
class Grandpa{
public Grandpa(){
System.out.println("grandpa");
}
}
class Father extends Grandpa{
public Father(){
System.out.println("father");
}
}
class Son extends Father{
public Son(){
System.out.println("son");
}
}
3. 对比(Override)
区别点重载Overload重写Override类个数同一个类多个类(父类与子类)参数列表必须修改一定不能修改返回类型可以修改一定不能修改异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常访问可以修改一定不能做更严格的
限制(可以降低限制)