![Java无难事:详解Java编程核心思想与技术](https://wfqqreader-1252317822.image.myqcloud.com/cover/59/35011059/b_35011059.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
4.2 方法的覆盖(override)
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt004_11.jpg?sign=1738884764-TpnqrnTNBsu4JulKCzL12rDM8bmKfPHP-0-56898a28e95919828234deee7d005e65)
扫码看视频
使用继承,我们可以让子类很容易地拥有父类的方法,从而实现代码的重用。不过有时候,子类的行为与父类的行为会存在一些差异,比如鱼的呼吸与一般动物的呼吸不太一样,因为鱼在水里的呼吸的行为更像是吐泡泡,因此基类Animal的呼吸方法有些不太适合Fish对象,这时候,我们可以在派生类Fish中重写breathe方法,如代码4.5所示。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt004_12.jpg?sign=1738884764-cgRayse0tWrOByIZcRMgMC4MckdZZkQk-0-9b26bf0507ba553ef2b703cd0af34af6)
从以上代码中可以看到,Fish类的breathe方法与Animal类的breathe方法完全一样。在子类中定义一个与父类同名、返回类型、参数类型均相同的一个方法,称为方法的覆盖。方法的覆盖发生在子类(派生类)与父类(基类、超类)之间。
程序运行的结果是:
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt004_13.jpg?sign=1738884764-sol9TI9pmySv3PdYqkFIypmFCQpRWZTB-0-1305b379bb0a848bf1b00aacd3b10522)
很完美!Animal对象按照一般动物的呼吸方式呼吸,而Fish对象按照鱼的呼吸方式吐泡泡。