抽象类

抽象是从具体中抽取出具有类似规律;

所以它和普通类是有区分的:

1、它本身不能被实例化,但是其子类可以。

2、普通类不能有抽象方法,但抽象类可以不仅有抽象的,还可以有非抽象的成员变量和成员方法。

3、某个类继承了一个抽象类,那么该类必须实现其抽象类的抽象方法,如果不实现,则该类必须使用abstact修饰,也就作为一个抽象类而存在。

接口

它是一个比抽象类更为抽象的“类”。同时你可以把它看做一个类与类之间的协议。

因为类使用某个接口,它仅需要知道该接口有哪些方法,仅此而已。因为它需要自己实现方法体,在规定好的方法内(方法名、参数列表、返回类型)。

还需要注意的是,它不仅是一个极度抽象的类;因为它的创建还允许创建一个能被向上转型为多种基类的类型。

还有一点需要注意的是,修饰符的种类和范围与类的基本一致。

当然这只是理论上的,如果是在具体实现代码的时候,就需要注意一些规范:

1、接口中所有方法都是抽象的,也就是说方法会被隐式地指定为public abstact 方法(){},常量会被隐式地指定为public static final 常量。

2、一个类可以有多个接口;如果是非抽象类,就必须实现接口中的所有抽象方法;否则,使用接口的类就只能是抽象类了。

参考资料:Java编程思想

抽象类和接口的区别:

①抽象类被继承用extends,接口被实现用implements,继承是单继承,实现可以是多实现,每个接口之间用逗号分开。

②抽象类里可以没有抽象方法,可以实现部分方法,而接口里全是抽象方法。

③抽象类里可以定义变量,可以有静态方法和静态代码块,接口内只能定义常量,不能有静态代码块和静态方法,没有变量的说法,里面的只有public static final修饰的常量。

④抽象类除了不能用private修饰,另外的三个访问修饰符都可以,接口只能用public访问修饰符修饰。

⑤接口比抽象类更抽象,所以接口比抽象类编程更灵活。

⑥当关注一个事物的本质的时候,用抽象类,当关注一个操作的时候,用接口。

语法层次

抽象类方式中,抽象类可以拥有任意范围的成员数据,同时也可以拥有自己的非抽象方法,但是接口方式中,它仅能够有静态、不能修改的成员数据(但是我们一般是不会在接口中使用成员数据),同时它所有的方法都必须是抽象的。在某种程度上来说,接口是抽象类的特殊化。

对子类而言,它只能继承一个抽象类(这是java为了数据安全而考虑的),但是却可以实现多个接口。

设计层次

1、 抽象层次不同。抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

2、 跨域不同。抽象类所跨域的是具有相似特点的类,而接口却可以跨域不同的类。我们知道抽象类是从子类中发现公共部分,然后泛化成抽象类,子类继承该父类即可,但是接口不同。实现它的子类可以不存在任何关系,共同之处。例如猫、狗可以抽象成一个动物类抽象类,具备叫的方法。鸟、飞机可以实现飞Fly接口,具备飞的行为,这里我们总不能将鸟、飞机共用一个父类吧!所以说抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a" 关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的, 仅仅是实现了接口定义的契约而已。

3、 设计层次不同。对于抽象类而言,它是自下而上来设计的,我们要先知道子类才能抽象出父类,而接口则不同,它根本就不需要知道子类的存在,只需要定义一个规则即可,至于什么子类、什么时候怎么实现它一概不知。比如我们只有一个猫类在这里,如果你这是就抽象成一个动物类,是不是设计有点儿过度?我们起码要有两个动物类,猫、狗在这里,我们在抽象他们的共同点形成动物抽象类吧!所以说抽象类往往都是通过重构而来的!但是接口就不同,比如说飞,我们根本就不知道会有什么东西来实现这个飞接口,怎么实现也不得而知,我们要做的就是事前定义好飞的行为接口。所以说抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。

参考博文:java提高篇(四)-----抽象类与接口、深入理解Java的接口和抽象类

了解抽象类和接口----------【Java基础】相关推荐

  1. 使用抽象类还是接口(Java)

    "要针对接口编程,不要针对实现编程."那么,在java的世界里,这里的接口指的是什么呢?无非是以下两种实现方式: 方式1)抽象类(只能有一个超类) 方式2)接口Interface( ...

  2. NO.16 沙场秋点兵:类vs抽象类vs接口 | Java敲黑板系列

    开场白 老铁 :接口.抽象类.类--三位英雄执剑走天涯,行侠仗义,被誉为"Java帝国三剑客".三位英雄从来都不会争强好胜,而是相互协助,发挥各自优势,共同打造Java帝国的强安全 ...

  3. Java 的抽象特性:抽象类与接口深度解析

    要点: 抽象类 接口 抽象类与接口的差别 一. 抽象 对于面向对象编程来说,抽象是它的四大特征之中的一个. 在Java中,能够通过两种形式来体现OOP的抽象:接口和抽象类. 接口和抽象类为我们提供了一 ...

  4. Java学习系列之抽象类和接口的区别和联系

    导读 本文首先分别介绍抽象类和接口的基础概念.特征和应用场景,然后介绍其区别和联系. 1 抽象类 1.1 定义抽象类 在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修 ...

  5. Java复习之抽象类和接口

    Java复习之抽象类和接口 Java复习之抽象类和接口 什么是抽象类和接口 抽象类与接口的区别 什么情况下使用抽象类或接口 一个demo引起来的对于java方法区堆栈的研究 首先我们需要明白抽象类与接 ...

  6. 简单的介绍一下怎样如何学习Java基础

    在我看来,学习Java最好的方式就是通过书籍(或博客)+动手写代码,辅以视频,通过多写多练,达到熟练掌握的程度.博主曾经看过一篇文章,讲的是费曼学习法,其中讲到学习的四个步骤:选择目标.教学.纠错学习 ...

  7. java基础(六)多线程/设计模式

    这辈子没办法做太多事情,所以每一件都要做到精彩绝伦! People can't do too many things in my life,so everything will be wonderfu ...

  8. 【读书笔记】Java基础学习之目录

    前述 :本人目前正在学习java,开发Android应用,因此重新来把java学习一遍. 本文所有资料来源于互联网,我将根据自己的学习进度,不断的将资料整合,就当作是读书笔记吧! 本文作为目录页,将不 ...

  9. 第一阶段>>>Java基础进阶 OOP/Reflect/注解/IO流/API核心

    目录 >>>java基础01-结构以及类型 >>>java基础02-初识数组 >>>java基础03-面向对象OOP >>>ja ...

  10. Java 基础知识总结(附PDF文档)

    您好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦. 这篇基础知识总结包括六个章节,可以下载保存后慢慢看,希望对您有帮助! https://download.csdn.net/download/m0 ...

最新文章

  1. 老版本的Spring应用该如何应对这次的RCE漏洞?
  2. 能进这个Java组织的都是大神,现在只有三个中国人
  3. Apache 反向代理,Laravel获取用户真实IP
  4. (23/24) webpack实战技巧:如何在webpack环境中使用Json
  5. WAMP PHP开发环境
  6. php反选全选代码,jQuery中实现全选,反选实例代码 (推荐)
  7. 写这么骚的代码,真不怕被同事揍么?
  8. iOS - LocalNotification
  9. 免费搭建私人云盘+内网渗透+不限速无限存储
  10. 【Taro开发】-自定义导航栏NavBar(五)
  11. WorkNC编程软件配套英格索尔高速铣刀帮助奥迪加工
  12. 视频会议服务器维护,视频会议系统一般故障与应对措施
  13. zblog html代码,简单快速修改zblog模板的重要代码
  14. 鼠标滚轮事件onmouewheel
  15. /bin/bash^M: 坏的解释器: 没有那个文件或目录
  16. 鸿蒙开发板Hi3861模拟SPI驱动JLX12864_LCD(UC1701X)_基于code-2.0
  17. Windows自启动方式完全总结
  18. #计算机应用与技巧分享 #应用推荐 #录屏 Captura 免费开源的屏幕录制工具
  19. 格式转换——bmp 2 yuv
  20. 产品管理精华:第三,需求调研,从用户出发

热门文章

  1. 传腾百联投马可波罗,突袭阿里后院
  2. Java实现 蓝桥杯VIP 算法提高 3-3求圆面积表面积体积
  3. 连续系统的时域分析(一)LTI连续系统微分方程解法1——y(0 +)的求法
  4. java 职级评定申报_职位等级评价方法(职级评价法)
  5. 问道手游安卓服务器维护公告,问道手游安卓服务器11月17日维护公告
  6. 答题小程序支付开通会员设计
  7. 弘辽科技:淘宝存在严重违规无法开店应该怎么办?
  8. 恢复Win10中缺少的电源计划
  9. matlab打靶法程序,打靶法(含Mtlab程序).doc
  10. 定位ListView到指定的某一个条目