重载和重写的区别?
1. 方法的重写
-
重写,建立在继承的关系上,在子类中实现
-
类的继承关系可以产生一个子类,子类继承父类,子类具备了父类所有的特征,继承了父类所有的方法和变量。
-
当父类的方法没法满足条件时,子类可以定义新的特征,修改父类的一些方法进行扩展,增大功能,这种操作成为方法的重写/覆盖/覆写。
-
-
被子类重写的方法,其方法的返回值类型、方法名、方法的参数列表需完全相同
-
参数列表中,参数个数、参数类型、参数类型的顺序需完全相同
-
-
子类重写的方法不能拥有比父类更加严格的访问权限
-
父类中方法的访问权限修饰符为private,方法被private修饰,实现方法私有化,该方法只能在本类中被访问,不能被外部的类访问,子类是不能重写该方法的。
-
子类重新定义,也只是定义了一个新的方法,不会达到重写的效果。
-
如果父类的方法访问权限修饰符为public,被子类重写的方法访问权限修饰符为private,程序运行时就会报错。
-
子类重写父类方法时,修饰符要大于等于父类修饰符的权限
-
-
继承过程中如果父类的方法抛出异常,子类重写该方法时也要抛出异常
-
子类不能多于父类中抛出的异常
-
子类可以等于父类中抛出的异
-
重写方法一定不能抛出新的检查异常
-
子类异常不能大于父类异常
-
-
构造方法不能被继承,不能被重写
-
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果(多态性)
-
大大提高程序的可复用性、重用性、扩展性
-
2.方法的重载
-
方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同
-
参数列表不同:参数类型、参数个数、参数类型的顺序不同
-
方法的返回类型、修饰符可以相同,也可不同。
-
重载的方法可抛出不同的异常。
-
-
构造方法的重载
-
方法构造中形参名与属性名相同时,需要使用this关键字区分属性(成员变量)与形参(局部变量)。
-
this.成员变量名(属性名)
-
实现对象属性不同的初始化
-
-
以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法(多态性)
-
一个对象有多种形态,每个状态的处理和变化都是不一样的。
-
对象在不同状态下(多态)调用重载方法得到的结果可以不一样。
-
3.重写和重载区别
| 重写 | 重载 | |
|---|---|---|
| 范围: | 不同类中(继承类) | 同一个类中 |
| 参数列表: | 参数类型、参数个数、参数类型的顺序不同 | |
| 返回值类型: | 完全相同 | 可以相同,可以不相同 |
| 访问权限修饰符: | 子类重写父类方法时,修饰符要大于等于父类修饰符的。父类被private修饰的方法不能被重写 | 可相同,可不同 |
| 抛出异常: | 子类异常不能大于父类异常,可相等,子类不可抛新异常 | 重载的方法可抛出不同的异常。 |
| 构造方法: | 不能被重写 | 可重载,需要使用this关键字区分属性与形参 |
| 多态性: | 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果 | 以统一的方式、方法处理不同类型数据 |
浙公网安备 33010602011771号