interface与abstract类的区别

abstract class 只能被继承extends,体现的是一种继承关系,而根据继承的特征,有继承关系的子类和父类应该是一种“is-a”的关系,也即两者在本质上应该是相同的(有共同的属性特征)。

interface 是用来实现的implements,它并不要求实现者和interface之间在本质上相同,是一种“like-a”的关系,interface只是定义了一系列的约定而已(实现者表示愿意遵守这些约定)。所以一个类可以去实现多个interface(即该类遵守了多种约定)。

很多情况下interface和abstract都能满足我们要求,在我们选择用abstract或interface的时候,尽量符合上面的要求,即如果两者间本质是一样的,是一种“is-a”的关系,尽量用abstract,当两者之间本质不同只是简单的约定行为的话,可以选择interface。

特点:

(1)abstract类其实和普通类一样,拥有有自己的数据成员和方法,只不过abstract类里面可以定义抽象abstract的方法(声明为abstract的类也可以不定义abstract的方法,直接当做普通类使用,但是这样就失去了抽象类的意义)。

(2)一个类中声明了abstract的方法,该类必须声明为abstract类。

(3)interface中只能定义常量和抽象方法。在接口中,我们定义的变量默认为public static final类型,所以不可以在显示类中修改interface中的变量;定义的方法默认为public abstract,其中abstract可以不明确写出。

interface与abstract类的区别相关推荐

  1. Java技术——Interface与abstract类的区别

    0. 前言   抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在对多态提供了非常好的支持.他们两者有很大的相似,甚至可以互换,但是也有区别.对于他们的选择反应了你对该问题的 ...

  2. 接口(interface)和抽象(abstract)类的区别

    2019独角兽企业重金招聘Python工程师标准>>> 接口与抽象类的区别: 1 两者表达的概念不一样.抽象类是一类事物的高度聚合,与子类的关系属于"是"的关系: ...

  3. abstract类与interface接口的区别

    abstract类与interface接口的区别:     abstract类:在一个类中的方法被abstract关键字修饰并且这个方法没有方法体,则这个类也必须使用abstract关键字修饰则这个类 ...

  4. abstract类和接口interface的联系和区别

    一,用关键字abstract类修饰的类称为abstract类(抽象类). abstract class A{ ----. } 特点: 1. 抽象类中可以有抽象方法和非抽象方法,但是抽象方法只允许声明不 ...

  5. java类接口的区别_【Java基础】java接口和类的区别-瑶瑶吖的回答

    基本语法区别 Java中接口和抽象类的定义语法分别为interface与abstract关键字. 抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为 ...

  6. abstract类中不可以有private的成员_别再说你不懂java面向对象了,阿里P7大佬一次性给你讲的明明白白

    前言 面向对象在百度百科中是这样解释的:"面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物".说的好像很流弊的样子,看看就行. 包的认识 1.1:包 ...

  7. Java中abstract类和abstract方法的相关问题

    当知道一个类的子类将不同的实现某个方法时,把该类声明为抽象类很有用,可以共用相同的父类方法,不必再定义. 抽象类和抽象方法的关系:含有抽象方法的类一定是抽象类,抽象类里不一定含有抽象方法. 抽象类存在 ...

  8. JAVA抽象类和接口类的区别

    JAVA抽象类和接口类的区别 1.声明方式不同.抽象类为abstract class,接口类为interface. 2.继承抽象类关键字为extends,实现接口关键字为implements. 3.继 ...

  9. Java中的abstract方法和abstract类的问题

    当知道一个类的子类将不同的实现某个方法时,把该类声明为抽象类很有用,可以共用相同的父类方法,不必再定义. 抽象类和抽象方法的关系:含有抽象方法的类一定是抽象类,抽象类里不一定含有抽象方法. 抽象类存在 ...

最新文章

  1. 空气球+操作系统,海尔智能家居雄心何在?
  2. 博为峰Java技术题 ——JavaSE 类加载器Ⅰ
  3. node.js常见的模块
  4. 在职场,没有永远的朋友,也没有永远的敌人,因为只有利益
  5. Laravel Cache 的缓存文件在到期后是否会自动删除
  6. android 文本分页显示,Android查看带有列表视图的分页器并动态添加文本
  7. div标签清除float浮动样式方法
  8. 回文字符串,回文链表
  9. 调用平安银行接口返回GBK乱码问题
  10. GitLab中用户的五种权限 Guest、Reporter、Developer、Master、Owner
  11. 贴纸UI效果如何制作,4个做贴纸效果的小技巧
  12. 政务网中使用内部华为云
  13. 网页上的文字不能复制怎么办?
  14. mysql删除多表视图数据,【杂谈】怎样删除mysql数据表视图中数据
  15. Rails部署云环境配置(Passenger+Apache)
  16. 批处理登陆邮箱代码分析
  17. 计算机网络实验 ——wireshark抓包简要分析TCP、UDP协议
  18. 飞信免费发短信API
  19. 平流式沉淀池流量计算_平流沉淀池设计计算
  20. 一秒钟看懂SaaS、CRM、OA、ERP、HR、进销存

热门文章

  1. 广域网加速及优化解决方案
  2. Opencv 基本操作五 各种连通域处理方法
  3. byzantine模型中tpm的应用
  4. autoit与程序化交易软件开拓者TB无人值守之一——启动开拓者TB并将每天收盘时的账户权益写入EXCEL
  5. c语言程序设计黑马答案,【上海校区】C语言程序设计100例之
  6. Web 2.0 用户界面技术
  7. 香港科技大学(广州)刘浩老师招收数据挖掘方向全奖博士/硕士
  8. 机器学习-使用FP-Growth算法来高效发现频繁项集
  9. 深度deepin自研软件包格式“玲珑”:兼容所有Linux发行版
  10. US5M-ASEMI贴片快恢复二极管US5M