JAVA-初步认识-第九章-接口和抽象类的区别
一. 接口和抽象类之间的区别
抽象类定义两个方法,接口中也可以定义两个方法,那么在定义的时候,到底是定义抽象类还是接口呢?
继承和实现是两回事。
抽烟不是学员的基本功能,是学员的扩展功能。学员要抽烟,就实现接口。
类在确定体系,接口在确定体系中的额外功能。
举例来说明,
按照之前讲述的知识,程序就可以这么写,但是呢,我们对其做了一个改进
将导盲的功能抽取出来,和不抽取,两者有什么区别呢?貌似不单独抽取好像更简便一些。但是引发的思考就是,不是说只有导盲犬有导盲的功能,其他的动物也有这个功能。
我继承了犬,就继承了犬的基本功能,继承了导盲,就具备了导盲功能,但是不能多继承。虽然继承不成,但是接口可以。
这样一来,两者就分工明确了。犬这个抽象类在定义的时候,定义了犬这个动物的最基本的功能。用类来定义基本功能,在问题领域分析的时候,导盲应该是额外功能。最终的形式就如下面所示。
如果非要将导盲接口取消,将导盲功能写入导盲犬,那么程序就没有扩展性。再换个角度来说明,如果所有的导盲动能都设置在子类中,导盲犬,导盲猫,导盲猪。要想三者全部出现,要下三个命令,导盲犬上,导盲猫上,导盲猪上。这就带来了问题,有共性的内容,没有提高复用性。二,可以这么说,凡是具备导盲,全部都给我去,这样就很简答了。导盲怎么来的,是这些物种不断抽取出来的,这就显示出将导盲功能抽取出来的好处了。
下面再说一说,问题领域中的一些分析。