旁白:这个面试题经常被问到,我这里从四个方面来总结。虽然面试的时候可能没有那么的时间全部说完,但我觉得概念设计目的应该要说清楚;因为从这两点就能看出你对两者的理解深度。

1.概念的不同

接口:是对行为的抽象,是抽象方法的集合。实现接口的类必须遵循契约模式,也就是必须实现
接口中的方法。
抽象类:是用于抽取子类通用特性的。是被用来创建继承层级里子类的模板,因此它不能被实
例化,只能作为父类被子类继承。

2.使用原则

接口使用最典型的例子是策路模式,不同场景下使用不同的策略,对行为的抽象。
抽象类使用最典型的例子是模板模式,是抽取不同类的通用代码构成父类,一是方便子类复用,二是子类可以重写父类实现自己的逻辑。

3.各有特点

接口特点

  • 接口本身没有构造函数,因此不能实例化;
  • 类可以实现多个接口,抽象类也可以,接口本身也可以继承其他接口;
  • 接口内部方法默认为 public访问级别,不能用fina关键字修饰方法;
  • 接口中只能包含抽象方法,默认省略 public abstract修饰字,不能包含其他任何已经实现的方法;但idk1.8后,接口中可以包static方法和 default方法。【这里可以思考下为什么要这么设计?】
  • 接口中的成员变量都是 public static finals类型的;对于基本类型,实现类中则不能改变值,对于引用对象,实现类则指向同一个对象,但对象中的内容可以改变。【这里可以思考下为什么要设计成静态不可変类型的成员变量?】
public interface eat{void food();  // 前面省掉了默认的 public abstractabstract void foodType();  // 默认省掉public
}

抽象类特点

  • 抽象类可以有构造函数,但本身不能实例化;定义为抽象类;
  • 含有抽象方法的类一定是抽象类,但抽象类中不ー定含有抽象方法;
  • 抽象方法需要用abstracte关键字来修饰,且不能用 private关键字来修饰,因为抽象方法需要被子类重写;
public abstract class Ainmal{abstract void run();  // 默认default修饰符  除了private 其他修饰符都可以public void breath(String organ){   // 实例方法System.out.println("用" + organ + "呼吸...");}
}
4.设计目的不同

抽象类是对事物的抽象,即对类的抽象;而接口是对行为的抽象。抽象类是对整个类进行抽象,包括属性和行为,但是接口只是对行为(方法)进行抽象。举个例子:飞机和鸟都会飞,但飞机和鸟是不同的事物,分别抽象为 Airplane类和Bird类;会飞是一种纯粹的行为或者方法,不可能把飞抽象成一个类,因此可以把会飞声明为一个接口Flyinterface, Airplane类和Bird类根据情况实现接口中会飞的方法。然后对于不同种类的飞机,如战斗机,民用机,无人机等继承 Airplane类,不同种类的鸟,如喜鹊,乌鸦,燕子等继承Bird类。所以,继承是一个“是不是”的关系,而接口实现是一个“有没有”的关系。无人机是不是飞机,乌鸦是不是鸟,“是”则是继承,飞机有没有飞这个能力,鸟有没有飞这个能力,“有”则是实现。

PS:如果想了解到更多关于Java、C、CPP等语言方面的特性知识;分布式开发zk的使用;mysql数据库的特性等;欢迎关注我们的公众号。

PS:内容丰富全面,共同进度!欢迎你的关注!

面试 | 接口和抽象类的区别相关推荐

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

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

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

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

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

    文章目录 一.抽象类的基础语法 二.接口的基础语法 三.接口在开发中的作用 四.接口和抽象类的联系 4.1 都不能被实例化 4.2 都可以包含抽象方法 五.接口和抽象类的区别 5.1 二者设计目的上的 ...

  4. 接口和抽象类的区别与使用场景

    前言: 前几天面试的是面试官问了一个问题 接口和抽象类了解吧? 说一下 他们的分别用在什么场景下(就是让说一下我该如何选择使用接口还是抽象类) 我回答的不忍直视. 我事后问了一个同学,你给我来了一句那 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. ubuntu自定义命令
  2. 字节跳动新员工入职一周,工作很少,每天很闲,从不加班!公司一堆漂亮小姐姐!完全不像外面说得那么忙!...
  3. asyncio之Coroutines,Tasks and Future
  4. 每天一个linux命令(15):tail 命令
  5. java.util.UnknownFormatConversionException: Conversion = ''';
  6. matplotlib绘图蓝本
  7. python基础函数图_Python基础:函数
  8. LeetCode 1673. 找出最具竞争力的子序列(单调栈)
  9. transformClassesWithProfilers-transformForFullDebug
  10. c#操作Xml(五)
  11. 【网络】为什么我执行了发布操作,但是线上的资源并没有更新?
  12. 项目经理是有责无权的“领导” 要会借力
  13. 【Unity3D】【UI】Cannot restructure Prefab instance.
  14. 金色传说:SAP-BC-导出数据时不能选择导出文件的格式问题
  15. onu搭建php,ONU的简单操作和故障排查
  16. Canon背后的故事
  17. 如何把PDF中的一页内容替换掉
  18. Bombs CodeForces - 350C
  19. python第七章_python教程(第七章)
  20. 一文读懂 WebSocket 通信过程与实现

热门文章

  1. 细胞衰老β-半乳糖苷酶染色试剂盒丨艾美捷解决方案
  2. 灵活而奇特的C++语言特性——typedef aliases
  3. Java攻城记(一)利器
  4. 在 Istio 服务网格中使用 Argo Rollouts 实现智能的渐进式发布
  5. sql命令未正确结束
  6. 华为防火墙旁挂,终端区域与服务器区域拓扑总结
  7. linux source和.的区别,source和.命令的区别
  8. python xy打不开、没有关联程序_解决该文件没有与之关联的程序来执行该操作
  9. 网易有道java面试题,网易有道-Java岗-一面面经
  10. CentOS查看版本号