温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java中abstract class和interface有什么区别

发布时间:2021-09-17 12:40:44 来源:亿速云 阅读:139 作者:chen 栏目:编程语言

本篇内容介绍了“java中abstract class和interface有什么区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  下面比较一下两者的语法区别:

  1.抽象类可以有构造方法,接口中不能有构造方法。

  2.抽象类中可以有普通成员变量,接口中没有普通成员变量

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

  4. 抽象类中的抽象方法的访问类型可以是 publicprotected 和(默认类型,虽然eclipse 下不报错,但应该也不行),但接口中的抽象方法只能是public 类型的,并且默认即为 public abstract 类型。

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

  6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是 public static final 类型,并且默认即为 public static final 类型。

  7. 一个类可以实现多个接口,但只能继承一个抽象类。

  下面接着再说说两者在应用上的区别:

  接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有 Servlet 类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet 都继承这个抽象基类,在抽象基类的 service 方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码,伪代码如下:

  public abstract class BaseServlet extends HttpServlet

  {

  public final void service(HttpServletRequest request,

  HttpServletResponse response) throws

  IOExcetion,ServletException

  {

  记录访问日志

  进行权限判断

  if(具有权限)

  {

  try

  {

  doService(request,response);

  }

  catch(Excetpion e)

  {

  记录异常信息

  }

  }

  }

  protected abstract void doService(HttpServletRequest

  request, HttpServletResponse response) throws

  IOExcetion,ServletException;

  //注意访问权限定义成 protected,显得既专业,又严谨,因为它是专门给子类用的

  }

  public class MyServlet1 extends BaseServlet

  {

  protected void doService(HttpServletRequest request,

  HttpServletResponse response) throws

  IOExcetion,ServletException

  {

  本 Servlet 只处理的具体业务逻辑代码

  }

  }

  父类方法中间的某段代码不确定,留给子类干,就用模板方法设计模式。

“java中abstract class和interface有什么区别”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI