Java中抽象类和接口的一点思索

成员方法上的区别:

1、 java中的抽象类可以提供成员方法的实现细节,抽象方法只能是被public和protected来修饰 配合abstract关键字,子类需要实现父类的所有抽象方法,只要有抽象方法,该类就得定义为抽象类,如果子类未实现父类的抽象方法,子类就得定义为抽象类,但是抽象类可以不包含抽象方法,(个人觉得这个有点歧义,既然不包含抽象方法,抽象类存在还有什么意义!但是我们不要过分纠结这种概念问题)

2、在jdk7之前接口是不可以提供成员方法的实现细节,在jdk8以后,接口中可以提供成员方法的实现细节,接口中的静态方法,直接用接口调用该方法,不能使用实现了该接口的子类来调用,其它有实现细节的成员方法需要用default来修饰,可以用他的实现类来调用,抽象的方法默认是public的,这里需要注意的一点是如果实现了多个接口,每个接口中都有相同的default修饰的方法,子类需要重写该方法。

3、java的抽象类具有自己的构造方法,接口不含有构造方法(本质上抽象类还是在类的层面,有构造方法并不奇怪,但是并不能实例化自己,)这里也有个问题,也有人说抽象类可以实例化,大致意思说,我们在实例化实现类的对象的时候,实现类的构造方法是会首先调用父类的构造方法的,这样其实就实例化了抽象类,

我们知道创建一个对象的方式有好多种,我们拿最常用的new Object();方式来说

那我们来简单理一下这个实例化的过程(这也是java约定好的),实例化是一个递归调用的过程,子类实例化的时候,会先进行递操作,一层一层往上走,直到Object以后,然后Object再一层一层往回归,这样的操作是为了子类实例化的时候,创建的对象的完整, 对象在实例化的时候,虚拟机为其分配内存,用来存放对象自己的实例变量和从父类继承过来的实例变量,这个时候实例变量的值都会默认给0,在内存分配完成之后,虚拟机就开始按照,程序员写的构造方法开始初始化,实例化。对象的创建其实是两个过程一个是初始化,另一个是实例化,(首先会初始化各个实例变量,包括自己的和从父辈继承来的,以及构造方法中的初始化,初始化完成之后,就实现了实例化)

4、那抽象类究竟能不能创建实例化,其实从汇编的角度看,程序都有一个代码段,在内存中需要占据一定的内存,而抽象类含有没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,抽象类是不能被实例化的,但对于那些没有抽象方法的抽象类,这里还需要再进一步的思考(会有问题)。另外从java语法的角度来考量的话,假设我们实例化了抽象类的对象,那么该对象调用了他自己的抽象方法,这个又如何处理?所以这里也是一个问题,在我看来抽象类是不能实例化的,这个我们把它理解为java编程语言的一个规范即可,不需要过分纠结!!!

成员变量上的区别:

抽象类的成员变量可以是任意修饰符来修饰的,接口中的成员变量是public static final,抽象类中可以含有静态的代码块

继承规则上的区别:

抽象类只能被单继承,接口可以实现多个。

设计使用上的区别:

抽象类还是在类的层面上来看问题的,具有自己的构造方法和成员变量和成员方法,是在类的基础上的一种抽象,日常项目开发中把我们需要的一些通用方法尽量上移,把一些需要不同实现的方法,也上移,这个时候我们使用抽象类,就可以很好的来解决这个问题,接口可以理解为对行为的一种抽象,对一类行为的(方法)的抽象,接口的设计是为了解耦的,单独的依靠抽象类,并不能将定义和实现很好的分离开来,一味的在抽象类中新加含有具体实现的方法,其实是对不需要该方法的子类的一种污染,一味的新加抽象方法,也需要对子类不断的更改,这个时候我们使用接口来定义这种行为,在需要的子类中实现该接口,就可以很好的处理这个问题。

关于Java中抽象类和接口的一点思索相关推荐

  1. Java中抽象类和接口在概念、语法和应用上的区别和关系

    2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...

  2. java中抽象接口_一篇文章让你彻底理解java中抽象类和接口

    相信大家都有这种感觉:抽象类与接口这两者有太多相似的地方,又有太多不同的地方.往往这二者可以让初学者摸不着头脑,无论是在实际编程的时候,还是在面试的时候,抽象类与接口都显得格外重要!希望看完这篇博客文 ...

  3. java中抽象类和接口的作用与区别

    抽象类与接口的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract ...

  4. 详细解析Java中抽象类和接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...

  5. Java中抽象类、接口、父类直接的区别与联系

    抽象类与接口的区别: 1)抽象类是一个只有变量或方法申明的类,这些变量(属性)和方法都是抽象类型的.抽象类没有对方法的实现. 2)接口则是一个只有方法申明.没有方法的实现,接口的方法也同样是抽象方法, ...

  6. 【转】详细解析Java中抽象类和接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...

  7. Java中抽象类和接口之间的区别

    一些受欢迎的访谈问题是"抽象类和接口之间有什么区别","什么时候使用抽象类以及什么时候使用接口". 因此,在本文中,我们将讨论这个主题. 在探讨它们之间的差异之 ...

  8. Java 中抽象类与接口

    Java 抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这个类就是抽象类. 抽象类不能创 ...

  9. 详细解析Java中抽象类和接口的区别(很容易理解错)

    2007-09-28 12:17作者:doublel出处:论坛整理责任编辑:方舟 在Java语言中, abstract class 和interface是支持抽象类定义的两种机制.正是由于这两种机制的 ...

最新文章

  1. Nature 子刊:加州大学Banfield组揭示CPR细菌和DPANN古菌多样性及与低温TEM下宿主互作关系...
  2. 交互式计算机图形学总结:第一章 图形系统和模型
  3. java activit怎么画图_Activiti 快速入门指南(用Java编写服务任务)
  4. DELPHI之备忘(二)
  5. 如何利用开源项目,帮助企业免费搭建小程序官网
  6. 八年磨一剑,阿里云ApsaraDB for HBase2.0正式上线 1
  7. nginx 中location和root,你确定真的明白他们关系?
  8. [转]Python中多线程与多进程中的数据共享问题!
  9. Python入门--元组的遍历,获取元组元素
  10. 车间调度建模系列5|扩展析取图之工序间物流周转时间
  11. vue 引入qunee_(原创) 工作流程图的树形展示-使用qunee插件实现
  12. ABP 在中抛出“Cannot access a disposed object. A common cause of this error is disposing”异常分析
  13. [4G/5G/6G专题基础-157]: 无线数据承载DRB与无线信令承载SRB
  14. es - elasticsearch - search - DSL - specialized - pinned
  15. 比 Elasticsearch 更快 RediSearch + RedisJSON = 王炸
  16. C语言:判断质数合数的代码
  17. Aveva.Bocad.v2.1-ISO 1DVD(钢结构详图设计软件)
  18. KVM虚拟化之(1):CPU技术
  19. 银行ATM登录管理系统(最简版)
  20. python 图像变化检测_霍夫变换检测图像直线算法python实现

热门文章

  1. python时间消耗统计
  2. cdn日志文件导入mysql进行分析,核心用到 Python
  3. MetaMask轻钱包教程 修心手把手带你玩小狐狸 钱包小白必备非原创
  4. vue点击元素自身之外触发事件指令
  5. 语言学研究思路(本章为分类,以后有别人论文的思路分析)
  6. 2020年英语四级作文
  7. 大学英语四级写作试题必背之35句型
  8. Encoder编码器、Decoder解码器
  9. 对于编码器与解码器的理解
  10. 职业生涯人物访谈作业格式