博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抽象类与接口的区别
阅读量:2428 次
发布时间:2019-05-10

本文共 1015 字,大约阅读时间需要 3 分钟。

面试的时候经常遇到接口与抽象类的区别,接口与抽象类的不同使用场景等问题,本文今天就讨论这些问题。

1.我对抽象类和接口的理解

接口与抽象类的不同的典型回答如下:

  • 接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到API定义和实现分离。
  • 抽象类主要用于代码重用。

当然以上是久经沙场考验的答案, 如果是面试中可以这么回答,但是对于抽象类和接口的区别我还想从另一个方面来谈谈它们的差异,从对事物的抽象层级上来说,接口更加彻底。对于行为的抽象使用抽象类也可以完成相同的功能。那还需要接口干嘛呢?在很多实际的场景下,抽象行为是不能给出任何具体的实现,只能有一个规范,举例来说动物的吃这个行为我们就只能给一个规范,因为各种各样的动物吃的行为都是不一样的。这种场景下我们就需要使用接口。而抽象类中的普通方法可以有自己的实现,所以它的抽象层级较接口要低一些。

2.接口与抽象类的语法区别

参数 抽象类 接口
默认的方法实现 可以有默认的方法实现,由于抽象类中可以有非抽象方法,因此在非抽象方法中可以有默认的实现 接口完全是抽象的。不能有方法的实现
实现 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有抽象方法的实现。 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
构造器 抽象类可以有构造器 接口不能有构造器
实例化 不能被实例化 不能呗实例化
访问修饰符 抽象方法可以有public、protected和default这些修饰符 接口方法默认修饰符是public
静态方法 抽象类可以有静态方法和静态代码块 接口不能有静态方法和静态代码块
静态属性 抽象类的静态属性可以自由定义 接口的静态属性默认是public static final
成员变量 抽象类可以有成员变量 接口没有成员变量
main方法 抽象方法可以有main方法并且可以运行 没有main方法
多继承 只能单继承 支持一个类实现多个接口
速度 它比接口速度要快 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。

3.接口和抽象类的使用场景

  • 如果希望某些方法有默认的实现,就可以使用抽象类
  • 由于Java不支持多继承,但是实际的需求又需要多继承,那么需要使用接口。
  • 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

转载地址:http://bwjmb.baihongyu.com/

你可能感兴趣的文章
我和美国 AI 博士聊了聊:2020 年,这件事比存钱更重要!
查看>>
陈芳,高考之后我要学计算机专业,将来做 IT 发财了,我就娶你!
查看>>
“编程能力差的程序员,90%输在这事上!”谷歌AI专家:都是瞎努力!
查看>>
张一鸣做电商:再造一个“抖音”
查看>>
“你写的 Bug 让我来改好吗” | 每日趣闻
查看>>
大厂技术文档:Redis+Nginx+Spring全家桶+Dubbo精选
查看>>
笑死,别再黑程序员了好吗? | 每日趣闻
查看>>
Python 爬取 13966 条运维招聘信息,这些岗位最吃香
查看>>
28 岁退休程序员自述:不是富二代,行政专业出身,非典型程序员
查看>>
那时刚毕业的我,曾参与惊心动魄 3Q 大战
查看>>
程序员爬取 5000+ 口红商品数据,差点比女朋友更懂口红?
查看>>
30 张图解 | 高频面试知识点总结:面试官问我高并发服务模型哪家强?
查看>>
以太坊创始人V 神:普通人看见现在,天才看见未来
查看>>
厉害!从电影花瓶到 Wi-Fi 之母,这才是乘风破浪的姐姐!
查看>>
中国开源大爆发进行时,你没掉队吧?
查看>>
用 Python 实现抖音上的“人像动漫化”特效,原来这么简单!
查看>>
一周内咸鱼疯转 2.4W 次,最终被所有大厂封杀!
查看>>
关于鸿蒙 2.0,那些开发者不知道的一切
查看>>
Google 排名第一的语言,引数十万人关注:搞定它,技术大牛都甘拜下风
查看>>
JavaScript 爆红后,微软为何还要开发 TypeScript?
查看>>