1、方法重载
- 被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
- 无法以返回值类型作为重载函数的区分标准。
protected void fun(int a) {
}
protected void fun(int a, int b) {//重载,参数个数不一样
}
protected void fun(long a) {//重载,参数类型不一样
}
private void fun(int a, long b) {//重载,参数类型不一样,修饰符不一样
}
private void fun(long b, int a) {//重载,参数顺序不一样
}
protected int fun(int a, int b, int c) {//重载,返回值不一样
return 2;
}
2、方法重写
- 参数列表必须完全与被重写方法的相同;
- 返回类型必须完全与被重写方法的返回类型相同;
- 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected
public class ParentClass {
protected void fun(int a, long b) {
}
}
public class SonClass extends ParentClass {
// protected void fun(int a, long b) {//完全一样是重写
//
// }
public void fun(int a, long b) {//在子类中的修饰符必须>父类中的修饰符权限
}
}
- 子类的返回值类型必须要小于或者等于父类的返回值类型。
- 父类的成员方法只能被它的子类重写。
- 声明为final的方法不能被重写。
- 声明为static的方法不能被重写,但是能够被再次声明
public class ParentClass {
protected static void fun(int a, long b) {
}
}
总结:
两同两小一大原则:
- 两同:方法名和参数列表相同
- 两小:返回值或声明异常比父类小(或相同)
- 一大:访问修饰符比父类的大(或相同)