目录
重写(Override)与重载(Overload)
重写(Override)
重写是子类对父类的允许访问的方式的实现过程进行重新编写,
返回值和形参都不能改变,即外壳不变,核心重写。
重写可以根据子类的需要,来定义属于自己的行为
也就是说子类能够根据自己的需求来实现父类的方法
重写注意点
1.重写方法不能抛出父类不包含的异常,或者比父类声明的异常更加宽广
2.子类覆盖父类,必须保证子类权限(修饰符)要大于或等于父类权限
才可以覆盖,且父类不能为private修饰
3.参数列表与被重写方法的参数列表完全一样
4.返回类型与被重载方法的返回类型可以不相同
但必须是父类的派生类(java5返回值相同,java7+可以不同)
5.子类重写了方法之后,子类调用方法会调用子类自己的方法,不会调用父类的方法
重写示例
//父类
class Over {
protected void a () {
try {
System.out.println("Over类当中的a方法");
}catch(RuntimeException E) {
E.printStackTrace();
}
}
}
//子类
class ride extends Over{
//修饰符比父类小,会编译异常
//void a () {
// System.out.println("Ride类当中的a方法");
//}
// 抛出比父类不包含的异常
// public void a () {
// throw new Exception();
// }
public void a () {
throw new RuntimeException();
}
}
重载(overload)
说明
重载(overload)是在一个类当中,方法名称相同,而参数不同
返回类型可以相同也可以不同
每个重载的方法(构造函数)都必须有一个第一无二的参数类型列表
最常用的地方就是构造器的重载
重载规则
被重载的方法必须改变参数列表(参数个数、类型、顺序)
被重载的方法可以改变访问修饰符
方能能够在同一个类中或者在一个子类中被重载
无法以返回值类型和修饰符作为重载函数区分的标准
重载实例
public void a (){
}
//个数不同
public void a (int i){
}
//类型不同
public void a (String i){
}
//个数不同
public void a (String b ,int i){
}
//顺序不同
public void a (int a ,String b){
}
重载和重写的区别
区别点 | 重载方法 | 重写方法 |
参数列表 | 必须修改 | 一定不能修改 |
返回值类型 | 可以修改 | 不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或更广的异常 |
访问 | 可是修改 | 子类不能比父类的修饰符大 |
总结
方法的重写和重载都是java多态性的不同表现,重写是父类的与子类之间的一种表现
重载可以理解成多态的具体表现形式
1.方法重载是一个类中定了多个方法名相同,而他们的参数的数量不同而类型
和顺序不同,则称为方法的重载
2.方法重载是在子类继承了父类并声明了相同的方法时,而且参数的个数与类型一样
返回值也一样,称为重写
3.方法重载是一个类多态性的表现,而方法重载是子类与父类的一种多态性表现