首页 > 代码库 > java抽象类与接口的比较

java抽象类与接口的比较

l  语法:

  抽象类:

    1.如果一个类中有个方法时被声明为抽象方法,那么本类需要用abstract关键字声明;

    2.抽象类的成员属性跟普通类没什么区别;

    3.抽象类不能被直接实例化;

    4.抽象类中的抽象方法可以用public product修饰  不能用static final private修饰;

    5.还是跟普通类一样只支持单继承

  接口:

    1.接口中的方法全部为  抽象方法  都是被public abstract修饰的

    2.接口中的变量全部为public static final修饰的常量

    3.接口可以多继承   是对java中单继承的一种折中解决办法;

l  设计理念:

    1.抽象类跟接口以及多态概念以及设计理念完全是为了描述现实世界的而提出来的:

    2.抽象类是对一类事物的抽象描述,而接口是对行为的抽象;抽象类主要描述的是类整体的一种描述,包括属性、行为、而接口是对类中行为的一种抽像描述;

  接口:面对的整个世界的行为(不区分类属体系);

  抽象类:对现实世界一类事物的向上抽取——面对一个(类属)体系

  语义体现:Extends/ implements == 是不是(类属)/有没有(能力)

 

l  设计层面上不同:

  1.抽象类作为很多子类的父类,体现的是一种“模板设计”的模式

    好处:继承—java中带来的好处避免数据的冗余,);

    例如: 根据PPT模板A 的基础上设计类PPTB、PPTC 那么A就可以看作模板 如果需要公共部分的改动,只需要修改A就行了

  2.接口:是对行为的抽取,体现的是辐射式的设计模式;如果接口进行类变更,实现类都需要该写

    好处:程序(行为)模块耦合度低设计灵活(例如:独立的萨德反导系统(定义成接口),这样路基实现该组接口,就可以路基发射;潜艇实现了该组接口,就可以海基发射;..等等,)

 

  总结12:抽象类可以看作是对整个世界纵向抽取;  接口是横向抽取所有类的行为的抽取;

 

l  面向接口编程(是一种软件的设计架构):

 

在系统分析和架构中,分清层次和依赖关系,每个层次不是直接向其上层提供服务(即不是直接实例化在上层中),而是通过定义(该层的)一组接口,仅向上层暴露其接口功能,上层对于下层仅仅是接口依赖,而不依赖具体类。对系统的灵活性大有好处;

例如:javaEE项目设计架构时:

              web层,service层,dao层

              我们习惯在dao层中暴漏:(注册相关一组接口)、(登录相关的一组接口)、(商品类查询的一组接口)...等等其他功能的接口组。这样整个项目的主支杆都好了,(架构清晰明朗)无论从维护,还是复用性,代码工程性来说,都大大地提高了!

 

 

 

      呵呵呵!希望大神们前来指正!!!。。

java抽象类与接口的比较