每日一道面试题之接口和抽象类有什么区别?

简介: 每日一道面试题之接口和抽象类有什么区别?

解释“接口”和“抽象类”:

在对他们进行比较之前,我们先来解释一下什么是接口?现实世界的接口通常是指两个不同物体之间相互交互所必须通过的一个"中介",没有这个"中介",两者就无法进行交互,我们把这个"中介"称为接口,例如:门窗户,楼道,插孔,电梯间等,但在软件世界中所提到的接口,有狭义和广义之分,狭义的接口是指某个程序设计语言所提供的API,广义的接口是指人与软件交互的图形界面,通过这个图形界面,人们才能使用此软件,JAVA中的接口是一种特殊的类,接口中只能包含常量和抽象方法,属于复合数据类型,是狭义的接口。,关于抽象类的解释大家可以去看这篇文章

相同之处:

1:都包含抽象方法,都不能被实例化

那么接口为什么不能被实例化呢?原因是:接口的定义和类很相似,分为接口声明和接口体两个部分,接口中能够定义的成员只有常量和抽象方法两种(或者两选一),不能包含构造方法,由于接口中只包含抽象方法,这就导致了它不能被实例化的原因和抽象类是相似的,而抽象类不能被实例化的原因我在之前的文章中有总结过,有需要的小伙伴可以去这里

2:他们的对象进行实例化操作的方法相同

无论是接口还是抽象类,虽然自身不能进行实例化操作,但由于抽象类和接口都是引用数据类型,可以声明抽象类和接口类型的引用变量,并将子类的对象实例赋给抽象类和接口变量,因此它们的对象都可利用其自身的多态性向上转型实现对接口或抽象类的实例化操作。对于向上转型这部分知识不懂的小伙可参考这篇文章


不同之处:

1:关键字不同:

对于接口,使用interface修饰接口,它的子类使用implements关键字实现该接口,而对于抽象类,使用abstract用来修饰抽象类,它的子类使用extends关键字继承该抽象类

2:组成不同

在抽象类中可以定义常量,变量,抽象方法,普通方法,构造方法,而对于接口,在java8之前,接口中只能定义抽象方法和全局常量,java8之后,接口中可以定义静态方法,但静态方法必须有方法体。

3:权限不同

抽象类可以使用各种权限,而接口的权限只能是public

4:关系不同

一个抽象类可以实现多个接口,但接口不能继承抽象类可以继承多个接口

5:局限性

由于java单继承的限制,一个子类只能继承一个抽象类,但一个子类可以实现多个接口

相关文章
|
5天前
|
Java
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(二)
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(二)
9 0
|
5天前
|
设计模式 Java 内存技术
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(一)
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(一)
13 0
|
9天前
|
消息中间件 存储 缓存
面试题--HashMap和TreeMap的区别和应用场景有啥区别?
然后底层调用key的hashCode()方法得出hash值; 过哈希表哈希算法,将hash值转换成数组的下标(注1),下标位置上如果没有任何元素,就把Node添加到这个位置上。如果说下标对应的位置上有值。此时,就会拿着key和链表上每个节点的key进行equal。如果所有的equals方法返回都是false,那么这个新的节点将被添加到链表的末尾。如其中有一个equals返回了true,那么这个节点的value将会被覆盖,如果最终长度大于8就会转成红黑树,红黑树插入;
13 3
|
20天前
|
存储 编译器 C语言
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题(下)
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题
32 1
|
20天前
|
存储 编译器 Linux
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题(中)
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题
29 1
|
1天前
|
存储 缓存 Java
面试官:Java中缓冲流真的性能很好吗?我看未必
【6月更文挑战第9天】面试官:Java中缓冲流真的性能很好吗?我看未必
19 3
|
12天前
|
存储 算法 Java
JAVA后端开发面试题库
JAVA后端开发面试题库
20 1
|
16天前
|
缓存 安全 Java
【Java面试——并发基础、并发关键字】
随着硬件指令集的发展,我们可以使用基于冲突检测的乐观并发策略: 先进行操作,如果没有其它线程争用共享数据,那操作就成功了,否则采取补偿措施(不断地重试,直到成功为止)。这种乐观的并发策略的许多实现都不需要将线程阻塞,因此这种同步操作称为非阻塞同步。 乐观锁需要操作和冲突检测这两个步骤具备原子性,这里就不能再使用互斥同步来保证了,只能靠硬件来完成。硬件支持的原子性操作最典型的是: 比较并交换(Compare-and-Swap,CAS)。CAS 指令需要有 3 个操作数,分别是内存地址 V、旧的预期值 A 和新值 B。当执行操作时,只有当 V 的值等于 A,才将 V 的值更新为 B。
|
25天前
|
SQL 存储 Java
致远互联java实习生面试
致远互联java实习生面试
34 0
|
25天前
|
Java
java面试基础 -- 普通类 & 抽象类 & 接口
java面试基础 -- 普通类 & 抽象类 & 接口
27 0