文章目录

  • 一、抽象类的基础语法
  • 二、接口的基础语法
  • 三、接口在开发中的作用
  • 四、接口和抽象类的联系
    • 4.1 都不能被实例化
    • 4.2 都可以包含抽象方法
  • 五、接口和抽象类的区别
    • 5.1 二者设计目的上的差异
      • 5.1.1 接口体现的是一种规范
      • 5.1.2 抽象类体现的是一种模板类设计
    • 5.2 二者在用法上的差异
      • 5.2.1 是否可以包含普通方法
      • 5.2.2 是否可以包含静态方法
      • 5.2.3 是否可以定义普通成员变量
      • 5.2.4 是否可以包含构造器
      • 5.2.5 是否可以包含初始化块
      • 5.2.6 是否可以多继承
  • 六、何时用接口或抽象类
  • 总结


一、抽象类的基础语法

 1、定义:在class前添加abstract关键字2、抽象类无法实例化,无法创建对象,所以抽象类是用来被子类继承的3、final和abstract不能联合使用,这两个关键字是对立的4、抽象类的子类可以是抽象类,也可以是非抽象类5、抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的6、抽象类不一定有抽象方法,抽象方法必须出现在抽象类中7、抽象方法怎么定义:public abstract void doSome();【用abstract修饰;不带大括号。】8、(*****五颗星):一个非抽象的类,继承抽象类,必须将抽象类中的抽象方法进行覆盖/重写/实现。

拓展:
面试判断题:
java语言中凡是没有方法体的方法都是抽象方法。

错误的。Object类中就有很多方法都没有方法体,都是以“;”结尾的,但他们都不是抽象方法
例如:public native int hashCode();这个方法底层调用了C++写的动态链接库程序。前面修饰符列表中没有:abstract。有一个native。表示调用JVM本地程序。

二、接口的基础语法

 1、接口是一种“引用数据类型”。2、接口是完全抽象的。3、接口怎么定义:[修饰符列表] interface 接口名{}4、接口支持多继承。5、接口中只有常量+抽象方法。6、接口中所有的元素都是public修饰的7、接口中抽象方法的public abstract可以省略。8、接口中常量的public static final可以省略。9、接口中方法不能有方法体。10、一个非抽象的类,实现接口的时候,必须将接口中所有方法加以实现。11、一个类可以实现多个接口。12、extends和implements可以共存,extends在前,implements在后。13、使用接口,写代码的时候,可以使用多态(父类型引用指向子类型对象)。

三、接口在开发中的作用

接口在开发中的作用,类似于多态在开发中的作用。
多态:面向抽象编程,不要面向具体编程。降低程序的耦合度。提高程序的扩展力。

public class Master{public void feed(Dog d){}public void feed(Cat c){}//假设又要养其它的宠物,那么这个时候需要再加1个方法。(需要修改代码了)//这样扩展力太差了,违背了OCP原则(对扩展开放,对修改关闭。)
}public class Master{public void feed(Animal a){// 面向Animal父类编程,父类是比子类更抽象的。//所以我们叫做面向抽象编程,不要面向具体编程。//这样程序的扩展力就强。}
}

面向抽象编程这句话以后可以修改为:面向接口编程。
有了接口就有了可插拔。可插拔表示扩展力很强。不是焊接死的。
主板和内存条之间有插槽,这个插槽就是接口,内存条坏了,可以重新买一个换下来。这叫做高扩展性。(低耦合度。)

接口在现实世界中的例子:

螺栓和螺母之间有接口
灯泡和灯口之间有接口
笔记本电脑和键盘之间有接口(usb接口,usb接口是不是某个计算机协会制定的协议/规范。)

接口有什么用?扩展性好。可插拔。
接口是一个抽象的概念。

另外举一个去饭馆吃饭的例子:

 接口是抽象的。菜单是一个接口。(菜单上有一个抽象的照片:西红柿炒鸡蛋)谁面向接口调用?(顾客面向菜单点菜,调用接口。)谁负责实现这个接口?(后台的厨师负责把西红柿鸡蛋做好!是接口的实现者。)这个接口有什么用呢?这个饭馆的“菜单”,让“顾客”和“后厨”解耦合了。顾客不用找后厨,后厨不用找顾客。他们之间完全依靠这个抽象的菜单沟通。

总结接口的作用:三个字“解耦合
面向接口编程,可以降低程序的耦合度,提高程序的扩展力。符合OCP开发原则。
接口的使用离不开多态机制。(接口+多态才可以达到降低耦合度。)
接口可以解耦合,解开的是谁和谁的耦合!!!
任何一个接口都有调用者和实现者。
接口可以将调用者和实现者解耦合,
调用者面向接口调用,
实现者面向接口编写实现。

以后进行大项目的开发,一般都是将项目分离成一个个模块,模块和模块之间采用接口衔接,降低耦合度。

四、接口和抽象类的联系

接口和抽象类很像,它们都有如下特征:

4.1 都不能被实例化

接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承

4.2 都可以包含抽象方法

接口和抽象类都可以包含抽象方法,实现接口或者继承抽象类的普通子类都必须实现这些抽象方法

五、接口和抽象类的区别

5.1 二者设计目的上的差异

5.1.1 接口体现的是一种规范

接口作为系统与外界交互的窗口,体现的是一种规范,接口规定了实现者必须向外提供哪些服务(以方法的形式来提供服务);
对于接口的实现者而言,接口规定了调用者可以调用哪些服务,以及如何调用这些服务(就是如何来调用方法);
当在一个程序中使用接口时,接口是多个模块间的耦合标准;
当在多个应用程序之间使用接口时,接口时多个程序之间的通信标准;
从某种程度上来看,接口类似于整个系统的“总纲”,它制定了系统各模块应遵循的标准,因此一个系统中的接口不应该经常改变。一旦接口改变将会导致系统中的大部分类都需要改写。

5.1.2 抽象类体现的是一种模板类设计

抽象类作为系统中多个子类的共同父类,它所体现的是一种模板式设计。
作为多个子类的抽象父类,可以被当成系统实现过程中的中间产品,这个中间产品已经实现了系统的部分功能(哪些已经提供实现类的方法),但这个产品依然不能当成最终产品,必须有更进一步的完善,这种完善可能有几种不同方式。

5.2 二者在用法上的差异

5.2.1 是否可以包含普通方法

接口里只能包含抽象方法,不包含已经提供实现的方法;抽象类则完全可以包含普通方法。

5.2.2 是否可以包含静态方法

接口里不能定义静态方法;抽象类可以定义静态方法。

5.2.3 是否可以定义普通成员变量

接口里只能定义静态常量Field(成员变量),不能定义普通Field;抽象类里既可以定义普通Filed,也可以定义静态常量Field。

5.2.4 是否可以包含构造器

接口里不包含构造器;抽象类里可以包含构造器,但构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。

5.2.5 是否可以包含初始化块

接口里不能包含初始化块;但抽象类完全可以包含初始化块。

5.2.6 是否可以多继承

一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承的不足。

六、何时用接口或抽象类

is a(继承)、has a(关联)、like a(实现)

     is a:Cat is a Animal(猫是一个动物)凡是能够满足is a的表示“继承关系”A extends Bhas a:I has a Pen(我有一支笔)凡是能够满足has a关系的表示“关联关系”关联关系通常以“属性”的形式存在。A{B b;}like a:Cooker like a FoodMenu(厨师像一个菜单一样)凡是能够满足like a关系的表示“实现关系”实现关系通常是:类实现接口。A implements B

总结

接口使用的比抽象类多,一般抽象类使用的少。
接口一般都是对“行为”的抽象。

接口和抽象类的区别与联系相关推荐

  1. python接口和抽象类的区别_接口和抽象类有什么区别?

    最近团队在招人:阿里新零售事业群CBU技术部招Java高级&专家,团队主要负责B2B工业品牌业务,坐标杭州滨江,有兴趣的小伙伴私戳我. **************************** ...

  2. java 关注公众号没有调接口_高频面试题:接口和抽象类的区别

    作为一个基础的Java高频面试题,是所有Java面试者必须烂熟于心的.当然不能死记硬背,可以通过实际地写几个小demo,边实际操作边理解,既能感受到编程的快乐,更重要的是真的理解记住了二者的区别. 此 ...

  3. Java接口学习(接口的使用、简单工厂、代理模式、接口和抽象类的区别)

    前言引入 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 我的 ...

  4. 接口与抽象类的区别和联系

    接口 1.因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但是可以实现多个接口,同时接口本身也可以继承多个接口. 2.接口里面的成员变量默认是public static final类 ...

  5. 接口和抽象类的区别?

    接口和抽象类的区别? 我先来说说它们俩在语法上的区别吧,然后再来谈谈我的个人理解. 抽象类可以有具体的方法和属性,  接口只能有抽象方法和常量. 抽象类使用abstract修饰,接口使用interfa ...

  6. 【转载】接口和抽象类的区别 --相信你看完不会再混淆了

    原文地址:http://www.cnblogs.com/huihui-gohay/archive/2009/12/13/1623070.html 我想,对于各位使用面向对象编程语言的程序员来说,&qu ...

  7. 接口与抽象类的区别,为什么要用接口,抽象类不香吗?

    接口是一种比较特殊的抽象类(个人理解) 接口与抽象类的区别: 最直观来说: 接口: 接口中变量是常量,所以接口中不能有构造方法.因为构造方法最大的作用是给对象赋值或改值(个人理解)和创建对象.因为变量 ...

  8. java接口和抽象类的区别(经典面试题)

    java接口和抽象类的区别(经典面试题) 要了解接口和抽象类的区别,首先需要明白接口和抽象类的定义. 1.抽象类 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可 ...

  9. 接口,类与接口的关系,接口与抽象类的区别

    接口 1 接口的概念 与之前学习过的抽象类一样,接口( Interface )在Java中也是一种抽象类型,接口中的内容是抽象形成的需要实现的功能,接口更像是一种规则和一套标准. 2 接口格式 3 接 ...

  10. 精通Java 面试 07题 接口和抽象类的区别 (持续更新中)

    文章目录 一.接口和抽象类的区别(方式一) 二.接口和抽象类的区别(方式二) 总结 这里我写了两种回答方式,可以各取所需. 一.接口和抽象类的区别(方式一) 抽象类可以存在普通成员函数,而接口只能存在 ...

最新文章

  1. Fetch API 初步解读
  2. 安装grid后启动asm报ORA-15149错误
  3. 函数式 vs 指令式
  4. FutureTask使用
  5. 打开多个界面_如何创建用户界面
  6. mysql数据库内存分配_MySQL OOM 系列一 Linux内存分配
  7. php 三个等号与两个等号,浅析JavaScript和PHP中三个等号(===)和两个等号(==)的区别...
  8. 阿里巴巴Java开发手册(2018-2021泰山版整理)
  9. 网页媒体播放利器 - JW Player使用心得
  10. Mysql分页查询出现重复数据
  11. Android应用市场应用转让申请流程
  12. word标题排序包括有汉字和罗马数字的标题排序
  13. 免费在线二维DataMatrix码生成器
  14. EXIF 方向参数 Orientation
  15. 安装系统之九 U盘装原版WIN8教程
  16. 上海软件工程师工资待遇调查
  17. 奥林匹克计算机竞赛保送,电脑奥赛中最寂寥的竞赛 5学生夺牌直通清华
  18. Git快速入门篇—— Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程)
  19. 移动端web设计尺寸_手机移动端网页按钮设计尺寸及间距规范
  20. ES6-11数值扩展:二进制和八进制、数值分隔符、Number.isFinite()、Number.isNaN()等

热门文章

  1. 华为OD机试题【天然蓄水库 or 天然蓄水池】用 C++ 编码,速通
  2. vmware虚拟机及CentOS7.6初始化安装、配置优化、设置静态IP
  3. 23种设计模式个人总结之C#版
  4. 私网IP如何访问Internet
  5. 抖音发布作品的频率|集光共创电商
  6. 王艳 201771010127《面向对象程序设计(java)》第十四周学习总结
  7. CAS:2379387-10-5;TPE-丙烯酰胺;AIE聚集诱导发光
  8. 搭建docker,docker搭建达梦数据库,详细【图文】
  9. autojs开发的火云与共享API脚本源代码免费分享
  10. 360度商品展示html5,360度图片旋转产品预览展示js插件