当前位置: 首页 > 图灵资讯 > 技术篇> Java开发中abstract class 和 interface 有什么区别?

Java开发中abstract class 和 interface 有什么区别?

来源:图灵教育
时间:2021-12-16 10:24:43

  abstractclass和interfaceJava开发中有什么不同?包含abstract修饰符的class就是一个抽象类,abstract类无法创建的实例对象。包含abstract方法的类必须定义为abstractclass,abstractclass类中的方法不一定是抽象的。abstractclass类中的抽象方法必须在一个具体的(Concrete)子类中实现,因此没有抽象构造方法或者抽象态方法。当一个子类不能实现抽象父类的所有抽象方法时,它也必须定义为abstract类型。

abstractclass和interface的不同之处

  界面(interface)可以说是抽象类的一种特殊形式,接口中的所有方法都必须是抽象的。该接口中的方法定义缺省是publicabstract类型,其成员类型在接口中是publicstaticfinal。以下是两者语法差异的比较:

  1.抽象类可以有构造方法,而在接口中没有构造方法。

  2.抽象类中可以有普通成员变量,在接口中不存在。

  3.非抽象的普通方法可以包含在抽象类中,并且接口中的所有方法必须是抽象的,不可能有非抽象的普通方法。

  4.对抽象类中抽象方法的访问类型可以是公开的、提供的和(缺省类型,尽管eclipse下没有出现错误,但是应该也没有),但是接口中的抽象方法只能为public类型,它的缺省类型是公共状态。

  5.静态方法可包含在抽象类中,静态方法不能在接口中。

  6.静态成员变量在抽象类和接口中可以包含,抽象类中静态成员变量的访问类型可以是任意的,但是定义在接口中的变量只能是publicstaticfinal,它的缺省类型是公共状态。

  7.一个类可能有多个接口,但仅能继承一个。

  接下来将重复说明这两种应用的不同:

  界面在系统体系结构设计方法中更有用,主要用来定义模块间的通信契约。并且抽象类在代码实现中起作用,可以实现代码的复用,比如模板方法设计模式就是抽象类的典型应用。假定项目的所有Servlet类以同样的方法进行权限判断,记录访问日志并处理异常,然后定义一个抽象基类,让所有的Servlet继承这个抽象基类,用service方法对抽象基类进行权限判断,对异常进行记录,并对其进行处理,下面是一些简单地在单个子类中完成其业务逻辑代码:

  伪代码-1

  伪代码-2

  在父类方法中,有些代码是不确定的,留给子类,用模板法来设计模式。