重写
重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
重写的规则:
1、被final修饰的方法不可以被重写,这个方法叫做密封方法。
2、被static、private修饰的方法不能被重写。
3、子类重写父类方法的时候,子类方法访问修饰限定符要大于等于父类的。
4、
子类在重写父类的方法时,一般必须与父类方法原型一致: 返回值类型
方法名
(
参数列表
)
要完全一致。
5、被重写的方法返回值类型可以不同,但是必须是具有父子关系的。
6、
重写的方法
,
可以使用
@Override
注解来显式指定
.
有了这个注解能帮我们进行一些合法性校验
.
例如不小心
将方法名字拼写错了
(
比如写成
aet),
那么此时编译器就会发现父类中没有
aet
方法
,
就会编译报错
,
提示无法
构成重写。
重写的设计原则:
对于已经投入使用的类,尽量不要进行修改。最好的方式是:重新定义一个新的类,来重复利用其中共性的内容, 并且添加或者改动新的内容。
静态绑定
:也称为前期绑定
(
早绑定
)
,即在编译时,根据用户所传递实参类型就确定了具体调用那个方法。典型代表函数重载。
动态绑定
:也称为后期绑定
(
晚绑定
)
,即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体调用那个类的方法。
重写与重载的区别:
区别点 |
重写
(override)
|
重载(overload)
|
参数列表
|
一定不能修改
|
必须修改
|
返回类型
|
一定不能修改【除非可以构成父子类关系】
|
可以修改
|
访问限定符
|
一定不能做更严格的限制(可以降低限制)
|
可以修改
|
即:方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现.