一条大鱼可以吃掉一条小鱼,那这条大鱼可以吃掉比那条小鱼更小的鱼吗?
-________-''当然可以啦
这次我们像上篇一样用Java模拟这样一个大鱼吃小鱼的场景:一条大鱼吃掉很多小鱼a,b,c,...,小鱼生命值降为0,大鱼恢复生命。
如果用原来的方法,需要定义所有的鱼类,给所有鱼类定义属性,再给大鱼类中定义一个方法。如果小鱼有很多很多条,那这样一个个去定义是有点麻烦的,而且即便是我们再定义鱼类、大鱼类、小鱼类,这三者也没有任何关系,但在现实中,鱼是包括了大鱼和小鱼的。
因此为了减轻代码的冗余,体现在现实中存在的关系,在这里引入继承这一概念。在我看来,程序中的继承关系是用来实现生活中的大类和小类的包含关系,比如学生包含了大学生、高中生、初中生等,老师包含了大学老师、高中老师、初中老师等。
Java类继承类的语法格式如下图
Java中类继承类的关键字为extends,而这句语句的意思是Smallfish类继承Fish类。子类(Smallfish类)继承到了父类(Fish类)的所有的属性和方法(不包含构造方法),且需要注意的是Java中类只能继承一个父类。
为了实现这个场景,首先定义Fish类
再定义Smallfish类和Bigfish类继承Fish类
在Bigfish类中定义eat方法即是方法重写。当父类中的方法不满足子类中方法的要求时,子类就必须要进行方法重写。调用重写的方法则需根据new关键字后的类名来决定:如果类名是子类的,那么优先调用子类的属性和方法,如果子类没有这些方法,那么就会调用父类中定义的属性和方法。
定义Fist类
现在运行,来看看效果怎样:
搞定!如果要吃更多的鱼,就实例化更多Smallfish类的对象。