抽象类、接口的具体例子

来源:互联网 发布:欧美爱情动作片 知乎 编辑:程序博客网 时间:2024/05/17 08:25

Java中抽象类的举例:

       StringBuffer和StringBuilder共同继承了一个父类AbstractStringBuilder。因为StringBuffer是线程安全的,StringBuilder是线程不安全的,这两个类中的数据、操作数据的行为都是一样的。StringBuffer为了保证他的线程安全,在他的每个方法上加了synchronized,即两个类的同名方法内要做了相同的操作,所以就把这个操作抽取到他们的父类AbstractStringBuilder类中。而所有的方法都是一样的,为什么AbstractStringBuilder是抽象类呢?查源码发现,只有toString()方法是抽象方法,我觉得应该是存放字符串的字符串在StringBuffer和StringBuilder这两个类中,而AbstractStringBuilder类只是提供一个工具,所以只声明一个方法名,数据在你们子类中,你们自己处理好了。这就是抽象类。

 

接口的例子:

   接口的例子就可以从AbstractStringBuilder的这个toString()方向去思考,因为StringBuffer和StringBuilder都需要将自己的数据转换成字符串,但是他们的数据类型又不同,只能各自去操作,所以呀,就让这些有相同的行为,但是具体的行为又不同的方法抽象出来,作为接口。

   Java中集合的父类list就是一个接口,因为每个集合都需要增删改查,但是集合本身又有差异,需要自己单独去处理,所以就把这些公共的增删改查的方法抽取出来,作为接口,让他们去实现,也算是集合的一种规范吧!

 

而在我们实际做项目的过程中?抽象类和接口怎么去用呢?

   我觉得在模块与模块之间,用接口去定义。把每个模块都要做的事提取出来,放在接口中,让处理这个模块的人自己去实现。比如说每个模块都要对数据库进行操作,那么我就把增删改查提取出来,放在一个接口中,让各个模块自己根据自己的实际需求去处理自己的方法就行了。

   而模块内部呢,可能有一些行为是相同的,相同的地方我去实现出来,避免子类重复实现,但是也有区别的方法,我声明一个方法体。这时候用一个抽象类,把行为相同用具体的方法去实现,不同的用方法名声明,让各自去实现好了!

0 0