1.方法的重载
定义:方法的重载是指一个类中定义多个同名的方法,但方法的参数类型、参数个数或参数顺序不同;
不仅是一般的方法,构造方法也可以重载;
方法能够在一个类中或一个子类中被重载;
方法重载例子:
Public class Main{
public static void main(String[] args) {
System.out.println(add(1, 2));
System.out.println(add(1, 2,3));
System.out.println(add(1.0,3.0));
}
public static int add(int x, int y) {
return x + y;
}
public static int add(int x,int y, int z){
return x+y+z;
}
public static double add(double x,double y) {
return x + y;
}
}
方法重载的条件:
- 方法名相同;
- 参数列表不同(类型,个数,顺序的不同);
- 方法返回值可以不同,可以相同(即与返回值类型无关);
另外注意:可以抛出不同的异常,可以有不同的访问限定符
2.方法的重写(覆写)
-
方法的重写只存在于子类和父类,在同一个类中方法只能被重载,不能被重写;
-
静态方法不能被重写:
a.静态不能重写为非静态;
b.非静态不能重写为静态;
c.子类可以定义域费雷静态方法同名的静态方法(不是重写); -
私有方法不能重写;
重写的语法:
1.方法名必须相同;
2.参数列表必须相同;
3.访问修饰符可以被扩大但不能被缩小;
4.抛出异常类型的范围可以被缩小,但不能被扩大;
5.返回类型可以相同,不同的话,子类返回类型必须是父类方法返回类型的子类型;
注:子类调用a方法,如果a方法在子类没有重写,那么就是调用子类继承父类的a方法,如果重写了,调用的就是子类重写之后的方法;
方法重写的例子
class Person {
private String name;
public void fun() {
System.out.println("aaa");
}
}
class Student extends Person {
public void fun() {
System.out.println("bbb");
}
}
public class Main {
public static void main(String[] args) {
Student stu = new Student();
stu.fun();
}
}
运行结果是:bbb
总结方法的重写:
- 必须存在继承关系;
- 方法名和形参必须跟父类的方法保持一致;
- 子类权限修饰符必须大于等于父类;
- 子类返回值类型必须小于等于父类;
- 子类的异常类型要小于或等于父类的异常类型;
方法重载和重写的区别
区别点 | 重载 | 重写 |
---|---|---|
形参列表 | 一定修改 | 不可修改 |
可用范围 | 一个类中 | 存在继承关系 |
返回类型 | 可以修改 | 不可修改 |
权限修饰符 | 可以修改 | 可以被扩大,不能缩小 |
异常 | 可以修改 | 可以被缩小,不可扩大 |