当前位置:首页 » 《我的小黑屋》 » 正文

java ---- 关于接口的常见面试题

16 人参与  2024年10月30日 14:00  分类 : 《我的小黑屋》  评论

点击全文阅读


 ? 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~

? 作    者:码喽的自我修养?
? 专    栏:Java入门到实战 ?

? 创作不易,如果能帮助到带大家,欢迎 收藏+关注 哦 ?

​ ??文章目录  

先来回顾一下接口的基础知识

常见面试题与答案

1、为什么接口中只能声明公共的静态的常量?

2、为什么JDK8.0 之后允许接口定义静态方法和默认方法呢?

3、为什么JDK1.9要允许接口定义私有方法呢?

4、说说接口与抽象类的异同点?

先来回顾一下接口的基础知识

接口本身不能创建对象,只能创建接口的实现类对象,接口类型的变量可以与实现类对象构成多态引用

声明接口用interface,接口的成员声明有限制:

(1)公共的静态常量

(2)公共的抽象方法

(3)公共的默认方法(JDK8.0 及以上)

(4)公共的静态方法(JDK8.0 及以上)

(5)私有方法(JDK9.0 及以上)

类可以实现接口,关键字是implements,而且支持多实现。如果实现类不是抽象类,就必须实现接口中所有的抽象方法。如果实现类既要继承父类又要实现父接口,那么继承(extends)在前,实现(implements)在后

接口可以继承接口,关键字是extends,而且支持多继承。

接口的默认方法可以选择重写或不重写。如果有冲突问题,另行处理。子类重写父接口的默认方法,要去掉default,子接口重写父接口的默认方法,不要去掉default。

接口的静态方法不能被继承,也不能被重写。接口的静态方法只能通过“接口名.静态方法名”进行调用。

常见面试题与答案

1、为什么接口中只能声明公共的静态的常量?

因为接口是标准规范,那么在规范中需要声明一些底线边界值,当实现者在实现这些规范时,不能去随意修改和触碰这些底线,否则就有“危险”。

例如:USB1.0规范中规定最大传输速率是1.5Mbps,最大输出电流是5V/500mA

​ USB3.0规范中规定最大传输速率是5Gbps(500MB/s),最大输出电流是5V/900mA

例如:高中学生行为规范中规定学生,早上8:25之前进班,晚上21:30之后离开等等。

2、为什么JDK8.0 之后允许接口定义静态方法和默认方法呢?

因为它违反了接口作为一个抽象标准定义的概念。

静态方法:因为之前的标准类库设计中,有很多Collection/Colletions或者Path/Paths这样成对的接口和类,后面的类中都是静态方法,而这些静态方法都是为前面的接口服务的,那么这样设计一对API,不如把静态方法直接定义到接口中使用和维护更方便。

默认方法:(1)我们要在已有的老版接口中提供新方法时,如果添加抽象方法,就会涉及到原来使用这些接口的类就会有问题,那么为了保持与旧版本代码的兼容性,只能允许在接口中定义默认方法实现。比如:Java8中对Collection、List、Comparator等接口提供了丰富的默认方法。(2)当我们接口的某个抽象方法,在很多实现类中的实现代码是一样的,此时将这个抽象方法设计为默认方法更为合适,那么实现类就可以选择重写,也可以选择不重写。

3、为什么JDK1.9要允许接口定义私有方法呢?

因为我们说接口是规范,规范是需要公开让大家遵守的。

私有方法:因为有了默认方法和静态方法这样具有具体实现的方法,那么就可能出现多个方法由共同的代码可以抽取,而这些共同的代码抽取出来的方法又只希望在接口内部使用,所以就增加了私有方法。

4、说说接口与抽象类的异同点?

总结:在开发中,常看到一个类不是去继承一个已经实现好的类,而是要么继承抽象类,要么实现接口。

到此这篇文章就介绍到这了,更多精彩内容请关注本人以前的文章或继续浏览下面的文章,创作不易,如果能帮助到大家,希望大家点点收藏+关注 ~?  

​ 

   更多专栏订阅推荐:

? JavaScript深入研究

? 前端工程搭建
? vue从基础到起飞

✈️ HTML5与CSS3

?️ JavaScript基础

⭐️ uniapp与微信小程序

? 前端工作常见问题与避坑指南

✍️ GIS地图与大数据可视化

? 常用组件库与实用工具

? java入门到实战 


点击全文阅读


本文链接:http://zhangshiyu.com/post/179982.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1