Java抽象类与接口的区别
看到题目的时候,你掌握这个知识点了吗?
常见面试问题如下:
- 接口和抽象类的区别,什么时候使用?
- 抽象类和接口的相同点和不同点?
总之就是经常问到的问题了。官方文档有句很逗的话,说给面试官听,估计很有意思。
所有的接口都是隐式的抽象声明。
Abstract class vs Interface
抽象类与接口都是用于功能的抽象。
- 方法: 接口只能有抽象方法,抽象类可以有抽象方法和非抽象方法。Java8以后,接口可以直接定义default和static方法了。抽象类可以有protect和private方法。
- 成员变量:接口中的成员变量默认是static和final的,抽象类可以像常规的对象一样定义各种成员变量。可以是非static和final的
- 实现:接口不能实现其他的接口,只能继承一个其它的接口。抽象类可以实现多个接口。
- 构造器:抽象类可以有构造器,接口不能有构造器。
- main方法: 抽象类可以有main方法,并且我们可以运行它。接口不能有main方法。
- 速度:抽象类速度更快一些,接口需要时间寻找类中的实现方法。
使用场景
Java8以后可以直接在接口中定义default方法和static方法,如此接口与抽象类之间的差异就小了一些。
抽象类使用场景
- 当你需要定义非静态和和或final类型的成员变量时,想要修改类中某些成员的状态的时候。考虑使用抽象类。
- 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
- 有时候一个类中全部都是静态方法,无需实例化的类可以考虑使用抽象类
接口使用场景
- 所有的定义的方法必须要实现的时候,完全的抽象考虑使用接口
- 一个类需要实现多于一个的接口。这个也叫做多继承
最后
解释一个常见的知识点
参考
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
R语言中GCC编译的问题
不仅仅编译R语言本身会非常的麻烦,实际上还有些R包为了提高运行速度将一些功能封装到C/C++中,随后在安装的时候会进行编译。 编译通过则万事大吉,如果不通关就是一番折腾。比如说我最近在服务器上安装DESeq2就遇到了这种事情,下面是解决的过程。 并不是所有的warning都可以忽视,比如说如下这种就不行。因为他说DESeq2的编译结果是“非零返回”,也就是失败了。而失败的原因则是前面这个包都失败了。 source("http://bioconductor.org/biocLite.R") biocLite("DESeq2") 编译失败的提示 那我们逐个解决,使用install.packages("RCurl")安装第一个失败的包。 动态库不存在 上面的报错信息cannot find -lxxx告诉我们,由于缺少两个动态库,xml和iconv, 导致编译不通过。那我们借助百度去安装这两个包,以xml为例 XML搜索结果 # xml2 wget -4 ftp://xmlsoft.org/libxml2/libxml2-git-snapshot.tar.gz tar xf libxml2-g...
- 下一篇
python中的zip、lambda、map操作
python 中有几个比较酷炫的操作,比如:zip、lambda、map 一、zip操作 zip字面意思:拉链。这么来记,把几个东西扔到一个包里,拉上拉链,就算打包好了。通俗点讲,就是把第1个参数、与第2个参数... 到第N个元素,按位置1个个对齐,打包输出一系列元组(turple). x = (1, 2) y = ("a", "b") zip_result = zip(x, y) print(list(zip_result)) x = [4, 5, 6] y = ['d', 'e'] zip_result = zip(x, y) print(list(zip_result)) 输出: [(1, 'a'), (2, 'b')] [(4, 'd'), (5, 'e')] 注意第2行的输出,这个类似木桶原理,元素个数最少的,决定最后输出元素的个数,x里有[4,5,6]3个元素,而y里有['d','e']2个元素,最终结果里就只有2个turple。另外zip的结果是一个对象,要查看的话,得转化成list对象,这样才能友好的输出。 二、lambda python里的lambda与c#、ja...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS关闭SELinux安全模块
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程