0. 前言  

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

本文原创,转载请注明出处:Java技术——Interface与abstract类的区别_SEU_Calvin的博客-CSDN博客

1. 两者关系总结  

(1)抽象类和接口都不能够实例化。一个类如果继承了某个抽象类可以选择不对抽象方法全部实现(仍为抽象类),但是实现接口的必须要实现该接口的所有方法。

(2)抽象类的出发点就是为了继承,只能继承一个父类。但是接口不同,一个类可以同时实现多个接口。

(3)抽象类中可以包含成员变量、抽象方法、具体方法、构造方法等;(抽象类中不一定必须有抽象方法,而有抽象方法一定是抽象类。)

而接口中只能存在成员变量和抽象方法。这些成员变量都会自动变为public static final,即静态的不可变的成员数据(但是一般都不在接口中定义成员数据)。

这里有个小问题,为什么接口的成员变量都会自动变为为public static final?

这是因为接口不可实例化,它的所有元素都不必是对象层面的,显然static 满足了这一点。

而且如果接口的变量能被修改,那么一旦一个子类实现了这个接口,并修改了接口中的没有被final修饰的变量,而该子类的子类再次修改这个变量的时候,造成的结果就是虽然实现了相同的接口,但接口中的变量值是不一样的,显然final满足了这一点。

(4)抽象类是对类抽象,是面向整个类的自下而上的设计理念,一般是先有各种子类,再有把这些有关系的子类加以抽象为父类的需求。

而接口是对行为的抽象,是面向行为的自上而下的设计理念,接口根本就不需要知道子类的存在,只需要定义一个规则即可。

2. 结束语  

通过以上从实现程度、一继承多接口、内部成员结构、以及设计理念四个角度对接口和抽象类的区别进行理解之后,便可以在选择使用接口或者抽象类时做出更加合理的设计。转载请注明出处:Java技术——Interface与abstract类的区别_SEU_Calvin的博客-CSDN博客

Java技术——Interface与abstract类的区别相关推荐

  1. interface与abstract类的区别

    interface与abstract类的区别 abstract class 只能被继承extends,体现的是一种继承关系,而根据继承的特征,有继承关系的子类和父类应该是一种"is-a&qu ...

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

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

  3. Java技术笔记1:类与对象实例之系统常用类

    待我君临天下,结发与蕊可好.@夏瑾墨 一直在反思最近的时间安排,知识没有总结和积累很容易发生遗忘,如果要让自己在短期内能有大的提升,那就需要每天的知识流输入,减去你生活中看起来也是重要的东西,然而性命 ...

  4. 1269道Java技术答疑,阿里技术专家帮你Java技术进阶

    云栖社区邀请到6位Java技术专家帮开发者答疑解惑,其中精华的1269道问答已经整理出来,供大家学习! 如有Java相关问题,请向专家提问https://yq.aliyun.com/promotion ...

  5. java 的方法是静态的类_Java中单例模式和静态方法类的区别

    最近翻看了一些资料,发现JAVA的单例模式并不简单:PHP并没有线程安全的问题,一个请求在结束后生命周期就结束了,PHP设计单例模式仅仅是为了如果在同一个页面多次处理,可以不用重复创建对象而已:JAV ...

  6. java 抽象接口类,Java接口(interface)和Java抽象类(abstract class)的区别(详诉版)

    1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架, 当代表业务逻辑的高层抽象层结构合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...

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

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

  8. abstract类与interface接口的区别

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

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

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

最新文章

  1. AI一分钟 | “芯片门”影响仍在,英伟达旗下多款芯片也遭遇“幽灵”漏洞影响;贾跃亭邀媒体试乘法乐第FF91,你怎么看?
  2. c语言中的printf函数_C语言中的printf()函数与示例
  3. 一般图最大匹配(UOJ-79)
  4. Python学习之==装饰器
  5. 我面试了我的前领导,他连做我的下属都不配
  6. Python3面向对象:实例(instance)
  7. 2022年计算机二级考试 Web程序设计模拟题及答案
  8. [精华]世界顶级防火墙LooknStop配置详解
  9. vue实现页面点击页面滚动-禁止鼠标滑轮滚动页面
  10. linux访问nfs文件夹,linux配置NFS网络共享文件夹目录
  11. Scratch模拟题(二级)_1
  12. 将腾讯qlv格式的视频转换为mp4格式
  13. android酷狗缓存目录,酷狗缓存的歌曲在哪个文件夹_酷狗音乐缓存的歌曲在电脑哪个目录-win7之家...
  14. matlab用正弦做随机信号程序,(MATLAB辅助现代工程数字信号处理)第6章平稳随机信号处理与分析.ppt...
  15. 交叉编译时不要忘记-march编译选项
  16. b500k电位器引脚接法_收录机旋转电位器b500k,可调式电位器25k
  17. 谈谈SPI (Serial Peripheral Interface,串行外设接口)
  18. 如何使用jquery修改css中带有!important的样式属性
  19. 我们正在研发建造了SpaceX的软件
  20. win8 开发之旅(19) --足球游戏揭秘5

热门文章

  1. 基于单片机HCSR501人体感应智能台灯设计(毕设课设)
  2. (二)、JavaScript页面访问记录(History 对象)
  3. windows开启远程桌面,防火墙拦截:只允许特定IP远程
  4. 水滴pin安卓版apk_小水滴app下载
  5. DNS提示错误无法上网怎么办?苹果电脑如何修改DNS?
  6. 中移物联ML302开发板上手体验
  7. 微信提示已连接到服务器失败,微信提示无法连接到服务器如何解决
  8. 基于IO多路复用的TCP客户端
  9. 如何看pg数据库版本号_pg版本是什么-和pg版本相关的问题-阿里云开发者社区
  10. 配色分享|梵高的薄荷绿