重载(Overload)
在一个类中,当有两个或两个以上方法名相同,
但形参列表不同(形参个数或类型不同,或二者均不同)称为方法的重载。
方法的重载与返回值类型无关。
重写(Override)
当子类继承了父类的方法,但方法体不适用于子类,此时进行方法的重写。
要求:
-
方法名:必须和父类被重写的方法名相同
-
形参列表:必须和被重写的形参列表相同
-
返回值类型:
基本数据类型和void:要求与父类被重写的方法相同
引用数据类型:子类重写的返回值类型<=父类被重写的返回值类型
就是,子类返回值类型是Student,父类返回值类型是Person这样的
-
修饰符:
权限修饰符:子类重写的方法权限修饰符可见范围>=父类被重写的方权限修饰符可见范围
-
异常类型:
子类重写的方法抛出的异常类型必须<=父类被重写的异常类型
原因?
多态的问题,编译时看父类型,catch捕获的是父类的异常类型,如果子类的异常>父类,catch抓不住。返回值类型<=同理
多态
重载和重写都是实现多态的方式。
但重载是一个类中多态的体现,在类加载时就已经确定,属于静态分派;
而重写是继承中多态的体现,是运行时多态性,属于动态分派。