
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
4.2 方法的覆盖(override)

扫码看视频
使用继承,我们可以让子类很容易地拥有父类的方法,从而实现代码的重用。不过有时候,子类的行为与父类的行为会存在一些差异,比如鱼的呼吸与一般动物的呼吸不太一样,因为鱼在水里的呼吸的行为更像是吐泡泡,因此基类Animal的呼吸方法有些不太适合Fish对象,这时候,我们可以在派生类Fish中重写breathe方法,如代码4.5所示。

从以上代码中可以看到,Fish类的breathe方法与Animal类的breathe方法完全一样。在子类中定义一个与父类同名、返回类型、参数类型均相同的一个方法,称为方法的覆盖。方法的覆盖发生在子类(派生类)与父类(基类、超类)之间。
程序运行的结果是:

很完美!Animal对象按照一般动物的呼吸方式呼吸,而Fish对象按照鱼的呼吸方式吐泡泡。