1)概念
重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程 进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定 于自己的行为。 也就是说子类能够根据需要实现父类的方法。
2)方法重写的规则
1. 子类在重写父类的方法时,一般必须与父类方法原型一致: 返回值类型、 方法名、 参数列表要完全一致。
2. 被重写的方法返回值类型可以不同,但是必须是具有父子关系的。
3. 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方 法就不能声明为 protected
4. 父类被static、private修饰的方法、构造方法都不能被重写。
5. 重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心 将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法 构成重写。
这里做几点解释:
3)方法重写和方法重载的区别
即:方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
做几点说明:
4)重写的设计规则
对于已经投入使用的类,尽量不要进行修改。最好的方式是:重新定义一个新的类,来重复利用其中共性的内容, 并且添加或者改动新的内容。
例如:若干年前的手机,只能打电话,发短信,来电显示只能显示号码,而今天的手机在来电显示的时候,不仅仅 可以显示号码,还可以显示头像,地区等。在这个过程当中,我们不应该在原来老的类上进行修改,因为原来的 类,可能还在有用户使用,正确做法是:新建一个新手机的类,对来电显示这个方法重写就好了,这样就达到了我 们当今的需求。
这里介绍一下静态绑定和动态绑定:
1. 静态绑定:也称为前期绑定(早绑定),即在编译时,根据用户所传递实参类型就确定了具体调用那个方法。典型代表--方法重载。
2.动态绑定: 也称为后期绑定(晚绑定),即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体 调用那个类的方法。典型代表--方法重写。
说明:
1. 动态绑定,编译的时候仍然认为是父类的方法,运行的时候,又认为成子类重写的方法。
2. 静态绑定,在编译期间就能确定调用哪个方法;动态绑定,编译期间确定不了,在运行期间才能确定调用哪个方法 (是否有方法重写等)。
uu们加油!!!