面试 | 接口和抽象类的区别
旁白:这个面试题经常被问到,我这里从四个方面来总结。虽然面试的时候可能没有那么的时间全部说完,但我觉得概念和设计目的应该要说清楚;因为从这两点就能看出你对两者的理解深度。
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:内容丰富全面,共同进度!欢迎你的关注!
面试 | 接口和抽象类的区别相关推荐
- 精通Java 面试 07题 接口和抽象类的区别 (持续更新中)
文章目录 一.接口和抽象类的区别(方式一) 二.接口和抽象类的区别(方式二) 总结 这里我写了两种回答方式,可以各取所需. 一.接口和抽象类的区别(方式一) 抽象类可以存在普通成员函数,而接口只能存在 ...
- java 关注公众号没有调接口_高频面试题:接口和抽象类的区别
作为一个基础的Java高频面试题,是所有Java面试者必须烂熟于心的.当然不能死记硬背,可以通过实际地写几个小demo,边实际操作边理解,既能感受到编程的快乐,更重要的是真的理解记住了二者的区别. 此 ...
- 接口和抽象类的区别与联系
文章目录 一.抽象类的基础语法 二.接口的基础语法 三.接口在开发中的作用 四.接口和抽象类的联系 4.1 都不能被实例化 4.2 都可以包含抽象方法 五.接口和抽象类的区别 5.1 二者设计目的上的 ...
- 接口和抽象类的区别与使用场景
前言: 前几天面试的是面试官问了一个问题 接口和抽象类了解吧? 说一下 他们的分别用在什么场景下(就是让说一下我该如何选择使用接口还是抽象类) 我回答的不忍直视. 我事后问了一个同学,你给我来了一句那 ...
- python接口和抽象类的区别_接口和抽象类有什么区别?
最近团队在招人:阿里新零售事业群CBU技术部招Java高级&专家,团队主要负责B2B工业品牌业务,坐标杭州滨江,有兴趣的小伙伴私戳我. **************************** ...
- Java接口学习(接口的使用、简单工厂、代理模式、接口和抽象类的区别)
前言引入 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 我的 ...
- 接口与抽象类的区别和联系
接口 1.因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但是可以实现多个接口,同时接口本身也可以继承多个接口. 2.接口里面的成员变量默认是public static final类 ...
- 接口和抽象类的区别?
接口和抽象类的区别? 我先来说说它们俩在语法上的区别吧,然后再来谈谈我的个人理解. 抽象类可以有具体的方法和属性, 接口只能有抽象方法和常量. 抽象类使用abstract修饰,接口使用interfa ...
- 【转载】接口和抽象类的区别 --相信你看完不会再混淆了
原文地址:http://www.cnblogs.com/huihui-gohay/archive/2009/12/13/1623070.html 我想,对于各位使用面向对象编程语言的程序员来说,&qu ...
最新文章
- ubuntu自定义命令
- 字节跳动新员工入职一周,工作很少,每天很闲,从不加班!公司一堆漂亮小姐姐!完全不像外面说得那么忙!...
- asyncio之Coroutines,Tasks and Future
- 每天一个linux命令(15):tail 命令
- java.util.UnknownFormatConversionException: Conversion = ''';
- matplotlib绘图蓝本
- python基础函数图_Python基础:函数
- LeetCode 1673. 找出最具竞争力的子序列(单调栈)
- transformClassesWithProfilers-transformForFullDebug
- c#操作Xml(五)
- 【网络】为什么我执行了发布操作,但是线上的资源并没有更新?
- 项目经理是有责无权的“领导” 要会借力
- 【Unity3D】【UI】Cannot restructure Prefab instance.
- 金色传说:SAP-BC-导出数据时不能选择导出文件的格式问题
- onu搭建php,ONU的简单操作和故障排查
- Canon背后的故事
- 如何把PDF中的一页内容替换掉
- Bombs CodeForces - 350C
- python第七章_python教程(第七章)
- 一文读懂 WebSocket 通信过程与实现