在子类中如果创建了一个方法与父类中的某个方法具有相同的名称、相同的返回值类型、相同的参数列表,只是方法体中的实现不同,以实现不同于父类的功能。这种方式被称为方法重写,又称为方法覆盖。
在重写方法时,需要遵循以下规则:
(1)参数列表必须完全与被重写的方法参数列表相同,否则不能称其为重写。
(2)返回的类型必须与被重写的方法的返回类型相同,否则不能称其为重写。
(3)访问修饰符的限制一定要不小于被重写方法的访问修饰符,否则不能称其为重写。
(4)重写方法一定不能抛出新的检査异常或者比被重写方法声明更加宽泛的检査型异常。例如,父类的一个方法声明了一个检査异常IOException,在重写这个方法时就不能抛出Exception,只能拋出IOException 的子类异常,可以抛出非检査异常。有关异常的内容会在后面章节中讲到。
【例4-5】 每种动物都有名字和年龄属性,但是喜欢吃的食物是不同的,如狗喜欢吃骨头、猫喜欢吃鱼等,因此每种动物的介绍方式是不一样的。在父类Animal中定义getInfo()方法,并在子类Cat和Dog中重写该方法,实现猫、狗的介绍方式。
父类Animal代码如下:(www.xing528.com)
第3~4行定义了成员变量,第6~10定义了带参的构造方法,用于给成员变量赋值。第11~13行定义了成员方法getInfo。
Cat类继承Animal类,并重写getInfo方法,代码如下:
第2行代码中的extends关键字说明了Cat类继承了Animal类,因为Animal类中没有不带参数的构造方法,所以Cat类必须显示通过super调用父类中的带参构造,如代码第4行。第6~9行代码,定义了getInfo方法,该方法与父类中的getInfo方法声明部分完全相同,但是方法体不同,故称为方法的重写。
Dog类也继承Animal类,并重写getInfo方法,代码如下:
根据方法重写的定义,第6~9行代码是子类Dog重写父类中的getInfo方法。编写测试类,代码如下:
上述代码的运行结果如下:
第4、5行代码分别创建了cat和dog对象。第6行代码中,通过cat对象调用Cat类中的getInfo方法,第7行代码中,通过dog对象调用Dog类中的getInfo方法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。