大家好,我叫何先振。今天主要讲面向对象之方法的重写。
1.定义:
在子类中可以根据需要对父类中继承来的方法进行改造。也称为方法的覆盖或者重置。在程序执行的时候,子类的方法将覆盖父类的方法。
2.应用:
重写以后,当创建子类对象以后,通过子类对象调用父类中的同名同参数的方法时,实际执行的是子类重写父类的方法。
父类有个eat()方法。

子类重写了eat()方法,方法上面有个三角代表重写的标志。

子类调用的是自己重写的eat方法,覆盖父类中的eat方法。

3.重写规定:
方法的声明:权限修饰符 返回值类型 方法名 throws 异常的类型(形参列表){ 方法体 };
约定俗称:子类中叫重写的方法,父类中叫被重写的方法。
子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同。因为方法是可以重载的,靠方法名无法确定是哪个方法。方法名+形参列表可以确定一个唯一的 方法。
子类重写方法的权限修饰符不小于父类被重写方法的权限修饰符。
例如:eat中父类中的是public ,如果子类中是private 比public权限小的话,就会报错。


特殊情况:子类不能重写父类中声明为private权限的方法。如果父类中声明了eat方法为private,那么子类就不能重写(没有三角的重写标识)。


返回值类型:父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型也必须是void。


父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或者A类的子类。例如:父类中的eat方法是Object类,子类重写了eat的方法可以是Object的子类String。


父类被重写的方法的返回值类型是基本数据类型,则子类重写的方法的返回值类型必须是相同的基本数据类型。例如:父类中Person的eat方法是int类型,子类中的Student也是int类型。


子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型。(具体放到异常处理的时候讲)。
实际开发中直接把父类中的被重写方法复制过来,改方法体。其他的都保持一致,这样就保证不会出错。
还有一种可以通过我们的开发工具,通过提示语句的快捷键,选择想要重写的父类中的方法。重写的方法默认上面会有个Override的注解。例如:输入eat,按快捷键,可以看到Override重写此方法eat。此时自动会弹出重写的方法,并且上面会有个Override的注解。(什么是注解这个后面会讲)。


子类和父类中的同名同参数的方法要么声明为非static的(可以考虑重写),要么声明成static的(这就不能被重写的)。static静态的方法是不能够被重写的,这个讲到static关键字我们再说。例如:父类中有个static的eat方法,子类是不能重写的,我们看子类写一样的,会没有重写的标识三角形符号。


以上是本期内容,下期我们接着讲解Java基础之面向对象封装性的四种访问修饰符。

582

被折叠的 条评论
为什么被折叠?



