本帖最后由 jzxyhjl 于 2014-4-22 14:20 编辑
尝试着把看到的接口内容整理了一下
接口和抽象类在结构上的区别:(引用4楼的内容)
1.抽象类 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
2.在抽象类 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
3.抽象类和interface所反映出的设计理念不同。其实抽象类表示的是"is-a"关系,interface表示的是"like-a"关系。
4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
7.接口中的方法默认都是 public,abstract 类型的。
接口和抽象类在使用上的区别:(引用http://hi.baidu.com/fuhvdovlptbghwd/item/fcdc278fe2e8ed56e63d1991)
以前对接口和抽象类,总是模糊,不知道什么时候用接口,什么时候用抽象类。
通过查阅一些资料,加上一些自己的理解,现在整理如下:
接口和抽象类有很大的相似性,甚至可以相互替换,因此很多开发者在进行开发时对于接口和抽象类的选择显得比较随意。其实,他们是有区别的。
对于接口的作用,在一些小的项目上,很难看出其发挥的优势。这就使一些经常的做小项目的开发人员,做时间久了就感觉不到它有什么好的,有时候写起来还麻烦,干脆不用了。其实,在一些大项目上,接口的作用是发挥地相当的明显的。
比如:如果你开发业务逻辑代码,当你好不容易的实现了它全部的功能,突然用户需求要改,你在修改你代码的同时,调用你代码的其它人也会改,如果代码关联性强的话,会有很多人都要改动代码,这样一来二去,程序会变得相当的不稳定,而且可能还会出现更多的新Bug,所有人都可能会陷入混乱。
但如果使用接口的话,在你使用它之前,就要想好它要实现的全部功能(接口实际上就是将功能的封装)。确定下这个接口后,如果用户需求变了,你只要重新写它的实现类,而其它人只会调用你的接口,他不管你是怎么实现的,它只需要接口提供的功能。这样,很可能只需要把你的代码修改就可以了,其他人什么都不用做。
同时:这样做的话,使得开发人员能够分工明确,只要确定下来接口了,就可以同时进行开发,提高开发效率。
另外,使用接口还有使用方便,可读性强,结构清晰等优点。
当然,我说的这些也可能是浅层面的,在其他方面还有很多的好处。
抽象类:可以有抽象方法,也可以有方法的实现。抽象类不一定有抽象方法,而有抽象方法的类一定是抽象类。抽象类不能实例化。
接口:只有方法体的声明,没有方法实现。
一个类可以实现多个接口,但只能继承一个抽象类。
在项目上,我们一般的做法是:最上层为接口,中间层次为抽象类,往下就是我们的实现类。
为什么我们会在中间加上抽象类呢,就是为了提高代码的可重用性,你可以在抽象类里提炼出一些公用的已经实现的方法,那么底下那些实现类只要继承它也就继承了这些方法。
我试着理解一下:
接口,抽象类和实现类的结构关系,和二叉树的根节点,二级节点和子节点的关系类似。
小型项目接口可以说优势甚微,而在大项目中可以很好地建立类之间的低耦合关系,而抽象类就是用于缓冲接口和实现类之间的直接联系,并且抽取实现类中的相同方法,做到代码最大化的复用,最后写道实现类时基本上就会让每个类的功能明确。
最后再次谢谢大家的回答和帮助
|