关注
接口和抽象类都不能被实例化。
接口可以包含抽象方法、静态方法(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 评论
相关推荐
04-02 14:41
中原工学院 iOS开发 点赞 评论 收藏
分享
03-02 14:50
华南农业大学 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你的实习产出是真实的还是包装的? #
34767次浏览 433人参与
# 牛友的志愿填报指南 #
62959次浏览 484人参与
# 厦门银行科技岗值不值得投 #
15621次浏览 359人参与
# 你的实习什么时候入职 #
366572次浏览 2355人参与
# 学历VS实习,哪个更重要? #
1589次浏览 46人参与
# 工作上你捅过哪些篓子? #
68287次浏览 315人参与
# uu们,春招你还来吗? #
62797次浏览 735人参与
# 面试紧张时你会有什么表现? #
33924次浏览 205人参与
# 面试中,你被问过哪些奇葩问题? #
96019次浏览 1260人参与
# 面试被问到不会的问题,你怎么应对? #
25482次浏览 646人参与
# 你都用vibe coding做过什么? #
21475次浏览 811人参与
# 机械人,签完三方你在忙什么? #
83893次浏览 266人参与
# 你觉得大几开始实习最合适? #
29699次浏览 309人参与
# AI Coding实战技巧 #
15183次浏览 299人参与
# 你见过哪些招聘隐形歧视? #
24404次浏览 214人参与
# 国庆前的秋招小结 #
291174次浏览 1742人参与
# 哔哩哔哩笔试 #
35075次浏览 142人参与
# 如果人生可以debug你会改哪一行? #
12756次浏览 167人参与
# 秋招特别不鸣谢 #
93192次浏览 685人参与
# 应届生被毁约被毁意向了怎么办 #
65302次浏览 313人参与
# 海康威视求职进展 #
132266次浏览 551人参与
查看13道真题和解析