java 接口与抽象类

来源:互联网 发布:mac jdk1.6下载 编辑:程序博客网 时间:2024/06/13 22:09

1.抽象类

包含抽象方法的类叫做抽象类,abstract关键字允许人们在类中创建一个或多个没有任何定义的方法。

               2.特点:

1.抽象方法一定在抽象类中 
2.抽象方法和抽象类都必须被abstract关键字修饰 
3.抽象类不可以用new创建对象,因为抽象方法没有意义,创建抽象类对象会编译出错 
4.抽象类如果被继承了,必须由子类复写起所有的抽象方法,建立子类 对象,如果子类只覆盖了部分抽象方法,那么子类还是一个抽象类。即子类如果不复写所有抽象方法,子类前面要加abstract。 
5.抽象方法一定存在于抽象类中,但抽象类中不一定都是抽象方法 
6.抽象类可以不定义任何抽象方法,那样做的意义就是不让该类建立对象

         2.接口

interface关键字产生一个完全抽象的类,他根本就没有提供任何具体实现。他允许创建者确定方法名,参数列表和返回类型,但是没有任何方法体,接口只提供了形式,未提供任何具体实现.                                                                 

1.接口中的成员都用默认的固定修饰符 常量:public static final 方法:public abstract 结构中的成员,都是被public修饰的 
2.接口是不可以创建对象的,因为它的方法都是抽象的,没有实际意义的。 
3.接口需要被子类实现,子类对接口中的抽象方法全部覆盖后,子类才可以实例化。否则子类就是抽象类。 
4.类与接口之间是实现,类与类之间是继承,接口与接口之间也是继承。 
5.类在实现接口中的方法时,必须在方法前用public修饰,因为接口中的方法都是public修饰,覆盖时权限能大不能小。 
6.类可以实现 多接口。因与继承不同的是,接口中的方法和变量都是抽象的,没有实际意义的,所以其中所有重名重复的属性都是相同的。
   

  3. 两者区别:

 1.Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以(就是interface中只能定义方法,而不能有方法的实现,而在abstract class中则可以既有方法的具体实现,又有没有具体实现的抽象方法),这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个 新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点

2.一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。(使用抽象类,那么继承这个抽象类的子类类型就比较单一,因为子类只能单继承抽象类;而子类能够同时实现多个接口,因为类型就比较多。接口和抽象类都可以定义对象,但是只能用他们的具体实现类来进行实例化。)

       3.从第2点不难看出,Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。

4.结合1、2点中抽象类和Java接口的各自优势,具精典的设计模式就出来了:声明类型的工作仍然由Java接口承担,但是同时给出一个Java 抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个Java接口,也可以选择继承这个抽象类,也就是说在层次结构中,Java 接口在最上面,然后紧跟着抽象类,这下两个的最大优点都能发挥到极至了。这个模式就是“缺省适配模式”。在Java语言API中用了这种模式,而且全都遵循一定的命名规范:Abstract +接口名。(A extends AbstractB implements interfaceC,那么A即可以选择实现(@Override)接口interfaceC中的方法,也可以选择不实现;A即可以选择实现(@Override)抽象类AbstractB中的方法,也可以选择不实现)

                5.一般而言,抽象类中总结的是对象的 基本功能,就像人都会吃饭睡觉;而接口中总结的是 额外功能,就像不是每个人都会编java。

              参考:http://blog.csdn.net/xw13106209/article/details/6923556

      参考:http://blog.csdn.net/qq_31515611/article/details/51001538


0 0