【你问我答】抽象类跟接口区别是什么?

问题描述:

抽象类跟接口区别是什么?

回答有奖:

选取一位认真回答问题的牛友,赠送200牛币!
▶回答尽量有自己的思考,不要单纯的只是复制粘贴定理定义,或者他人blog哦~

你问我答问题汇总:点击进入
关注你问我答栏目:点击关注

你问我答 - 答问题,成大佬,拿牛币!
你问我答是牛客新栏目,每周1期几个面试中真实遇到的问题,
牛友在问题贴下留下自己的知识,经验与见解,
帮助更多牛友了解更多技术相关知识!
#悬赏##Java##面试题目#
全部评论
区别总结: 区别一: 抽象类只能单继承,接口能多实现; 区别二: 抽象类是一个类,可以被任意权限修饰符修饰,静态和非静态属性,final和非final属性,可以有抽象方法和非抽象方法;接口只能被public,final修饰,只能有静态方法,即使没有显示的声明,而且是不可修改的; 区别三: 抽象的事物不同:   抽象类是对类的抽象,接口是对行为的抽象;抽象类是对整个类抽象,包括属性,行为; 接口是对类的行为(局部)进行抽象; 区别四: 定义的时候,定义抽象类和接口的思想不同; 设计抽象类是自下而上的过程,我子类需要,所以我定义抽象类; 设计接口是自上而下的过程,我接口规范某一行为,我某类需要这个行为,我实现某接口; 核心区别: 调用者使用动机不同,实现接口是为了使用他规范的某一个行为; 继承抽象类是为了使用这个类属性和行为. 再简单点说: 我们知道抽象类是从子类中发现公共部分,然后泛化成抽象类,子类继承该父类即可,但是接口不同。实现它的子类可以不存在任何关系,共同之处。例如猫、狗可以抽象成一个动物类抽象类,具备叫的方法。鸟、飞机可以实现飞Fly接口,具备飞的行为,这里我们总不能将鸟、飞机共用一个父类吧!所以说抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a" 关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的, 仅仅是实现了接口定义的规则而已。
2 回复 分享
发布于 2020-06-30 16:13
接口和抽象类都不能被实例化。 接口可以包含抽象方法、静态方法(JDK8)、默认方法(JDK8)、私有方法(JDK9),抽象类则完全可以包含普通方法。 接口只能定义静态常量(public static final) ,抽象类则可以定义普通成员变量,也可以定义静态常量。 接口不能包含初始化块,而抽象类可以。 接口不能包含构造器;抽象类可以包含构造器,是让其子类调用这些构造器来完成属于抽象类的初始化操作。 一个类只能有一个直接父类,包括抽象类,但一个类可以实现多个接口。 1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将飞行这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 "是不是"的关系,而接口实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。 2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。什么是模板式设计?最简单例子,大家都用过ppt里面的模板,如果用模板A设计了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它们的公共部分需要改动,则只需要改动模板A就可以了,不需要重新对ppt B和ppt C进行改动。而辐射式设计,比如某个电梯都装了某种报警器,一旦要更新报警器,就必须全部更新。也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动
1 回复 分享
发布于 2020-07-02 13:19
两者最大的区别是一个类可以实现多个接口,但是只能继承一个抽象类,也就是说Java是单继承的
点赞 回复 分享
发布于 2020-07-13 20:05
我来说一下抽象类的作用吧,不只是抽象哦! 抽象类降低了接口实现类对接口实现过程的难度(本来需要重写接口中所有方法,而有些方法接口实现类中并不需要);将接口中不需要使用的抽象方法交给抽象类去完成,接口实现类去继承抽象类,这样接口实现类可以只对需要的接口方法进行重写。😁
点赞 回复 分享
发布于 2020-07-10 15:19
1.语法层面上的区别   1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;   2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;   3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;   4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。 2.设计层面上的区别   1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。   2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。
点赞 回复 分享
发布于 2020-07-01 16:59
抽象类是一种特殊的类,可以有构造函数,可以用public protected等修饰符修饰,里边的方法可以是抽象方法也可以有非抽象的方法,它不可以被直接实例化,需要一个子类继承并复写其所有抽象方法才能实例化,只支持单继承。 接口不属于类,也就没有构造函数,只能用public修饰,所有的方法都是抽象方法,一个类可以实现多个接口,避免了单继承的局限性。
点赞 回复 分享
发布于 2020-06-30 12:14

相关推荐

03-02 08:18
集美大学 Java
钱嘛数字而已:没有赛事奖项么?另外,项目经历字有点多哈,建议突出一下重点:用的什么技术,解决什么问题,达到什么效果。
大家都开始春招面试了吗
点赞 评论 收藏
分享
03-11 23:33
已编辑
曲阜师范大学 后端工程师
牛客68808588...:果真开发过12306购票系统吗,这不是一眼就被看穿了
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务