概念
- 重写:又称覆盖,是子类继承父类的属性和方法后,因子类的方法可能会因子类自身特点而特殊化,但又是子类所必须具有的方法,因此通过子类继承父类后,重新写一个新的方法,来达到覆盖原有父类方法的目的。
- 重载:在同一个类中,允许存在一个或一个以上的同名函数,只要参数类型或参数个数不同即可。
特点
- 重写:当子类出现和父类一模一样的方法(函数)时,当子类对象调用该方法,会运行子类的方法,就像父类的方法被覆盖一样
- 重载:仅仅同名函数,参数列表不同,返回值不必一样
目的
- 重写:便于后期功能更新及维护,不必修改父类函数,在子类中就可以通过覆盖更新,提高了代码的拓展性。
- 重载:方便阅读,优化了程序设计
注意点
-
重写:
(1)子类覆盖父类时,必须保证权限比父类大或相等,否则编译失败。如public>protected(默认状态)>private
但当父类方法权限是private时,就算子类方法权限大于父类,由于父类私有方法不可被继承,所以子类就算有一个一模一样的方法,也不能成为覆盖,但是编译可以通过
特殊非覆盖例子
(2)静态只能覆盖静态,不能覆盖非静态,因为在加载类的时候自动加载静态方法,优先于实例化后才可以加载的非静态方法。
- 重载:以下情况不属于重载
void show(int a,int b)
double show(int c,char d)//不属于重载,这两种不允许出现在同一个类中,虚拟机会不知道该运行哪一个
例子
重写
-
保留父类原有功能定义,并结合super.函数的方式升级原有功能super重写
重载
-
定义的功能相同,但运算的内容不同时,因此定义一个相同名字的功能来表示如下例中的add,通过参数列表的不同来区分多个同名函数add
改良后,减少代码的复用性
add改良版