Java抽象类与接口的区别

简介: 看到题目的时候,你掌握这个知识点了吗?图片来源与网络常见面试问题如下:接口和抽象类的区别,什么时候使用?抽象类和接口的相同点和不同点?总之就是经常问到的问题了。

看到题目的时候,你掌握这个知识点了吗?


img_f6b91097c99c0cb464ca4405be45d229.png
图片来源与网络

常见面试问题如下:

  • 接口和抽象类的区别,什么时候使用?
  • 抽象类和接口的相同点和不同点?

总之就是经常问到的问题了。官方文档有句很逗的话,说给面试官听,估计很有意思。

img_ac060cc340deccb63d694a1d7e8fb5ee.png
Java语言规范

所有的接口都是隐式的抽象声明。

Abstract class vs Interface

抽象类与接口都是用于功能的抽象。

  • 方法: 接口只能有抽象方法,抽象类可以有抽象方法和非抽象方法。Java8以后,接口可以直接定义default和static方法了。抽象类可以有protect和private方法。
  • 成员变量:接口中的成员变量默认是static和final的,抽象类可以像常规的对象一样定义各种成员变量。可以是非static和final的
  • 实现:接口不能实现其他的接口,只能继承一个其它的接口。抽象类可以实现多个接口。
  • 构造器:抽象类可以有构造器,接口不能有构造器。
  • main方法: 抽象类可以有main方法,并且我们可以运行它。接口不能有main方法。
  • 速度:抽象类速度更快一些,接口需要时间寻找类中的实现方法。

使用场景

Java8以后可以直接在接口中定义default方法和static方法,如此接口与抽象类之间的差异就小了一些。

抽象类使用场景

  • 当你需要定义非静态和和或final类型的成员变量时,想要修改类中某些成员的状态的时候。考虑使用抽象类。
  • 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
  • 有时候一个类中全部都是静态方法,无需实例化的类可以考虑使用抽象类

接口使用场景

  • 所有的定义的方法必须要实现的时候,完全的抽象考虑使用接口
  • 一个类需要实现多于一个的接口。这个也叫做多继承

最后

解释一个常见的知识点

参考

目录
相关文章
|
9天前
|
安全 Java
【JAVA】在 Queue 中 poll()和 remove()有什么区别
【JAVA】在 Queue 中 poll()和 remove()有什么区别
|
9天前
|
Java API
【JAVA】final、finally、finalize 有什么区别?
【JAVA】final、finally、finalize 有什么区别?
|
9天前
|
Java
【JAVA】throw 和 throws 的区别?
【JAVA】throw 和 throws 的区别?
|
5天前
|
存储 Java
java IO接口(Input)用法
【5月更文挑战第1天】Java的`java.io`包包含多种输入输出类。此示例展示了如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着创建一个字节数组存储读取的数据,调用`read()`方法将文件内容填充至数组。然后将字节数组转换为字符串并打印,最后关闭输入流。注意,`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
16 2
|
5天前
|
NoSQL Java API
java一行代码实现RESTFul接口
Spring Data REST是构建在Spring Data之上的库,可自动将repository转换为REST服务,支持JPA、MongoDB、Neo4j、GemFire和Cassandra。无需手动创建Service和Controller层。要开始,需配置JPA数据源,创建实体类和Repository接口。快速实现REST接口,只需引入spring-boot-starter-data-rest Maven依赖,并在Repository接口上添加@RepositoryRestResource注解。
|
6天前
|
Java
Java中 a+=b和a=a+b有什么区别?
Java中 a+=b和a=a+b有什么区别?
|
6天前
|
Java 开发者
Java中三种Set的实现类的用法和区别
Java中三种Set的实现类的用法和区别
|
7天前
|
Java 程序员 数据格式
关于Java抽象类和接口的总结和一点个人的看法
关于Java抽象类和接口的总结和一点个人的看法
|
9天前
|
存储 安全 Java
【JAVA】concurrentHashMap和HashTable有什么区别
【JAVA】concurrentHashMap和HashTable有什么区别
|
9天前
|
安全 Java
【JAVA】线程的run()和start()有什么区别?
【JAVA】线程的run()和start()有什么区别?