【面试问题】接口和抽象类有什么区别?

简介: 【1月更文挑战第27天】【面试问题】接口和抽象类有什么区别?

接口(Interface)和抽象类(Abstract Class)是 Java 中两种用于实现抽象类和多态的机制,它们有一些关键的区别,包括设计目的、成员特性、构造函数等。以下是它们的主要区别:

1. 设计目的:

  • 接口:
  • 主要用于定义类的契约(contract)或行为。接口中声明了一组抽象方法,但没有具体的实现。
  • 支持多继承,一个类可以实现多个接口。
  • 抽象类:
  • 用于表示一个通用的基类,可以包含抽象方法和具体方法。
  • 支持单继承,一个类只能继承一个抽象类。

2. 成员特性:

  • 接口:
  • 可以包含常量(public static final)、抽象方法(public abstract)、默认方法(在 Java 8 引入,默认方法有具体实现)和静态方法(在 Java 8 引入,属于接口而不是实现类)。
  • 成员默认是公共的,并且不能包含实例变量。
  • 抽象类:
  • 可以包含常量、抽象方法、具体方法和构造方法。
  • 成员可以具有不同的访问修饰符,包括私有、受保护、默认(包级别)和公共。
  • 可以包含实例变量。

3. 构造函数:

  • 接口:
  • 不能有构造函数。接口中的成员是隐式公共、静态和抽象的,没有实例变量。
  • 抽象类:
  • 可以有构造函数。抽象类可以有实例变量,可以有非抽象方法,可以有构造函数,但不能实例化抽象类。

4. 继承:

  • 接口:
  • 支持多继承,一个类可以实现多个接口。通过关键字 implements 实现接口。
  • 抽象类:
  • 支持单继承,一个类只能继承一个抽象类。通过关键字 extends 继承抽象类。

5. 使用场景:

  • 接口:
  • 用于表示一种能力或行为,实现多态性。
  • 适用于设计大型系统的一部分,通过接口定义系统的模块。
  • 抽象类:
  • 用于表示一种对象的基本类型,可以包含一些共用的方法和属性。
  • 适用于一些相关类之间的代码复用。

6. 特殊注意事项:

  • 接口:
  • 默认方法和静态方法在 Java 8 中引入,为了在接口中添加新的方法而不破坏现有实现。
  • 抽象类:
  • 可以包含非抽象方法,提供一些通用的功能实现。
  • 可以包含实例变量,用于存储对象状态。


在实际设计中,应根据具体需求选择使用接口还是抽象类,有时候它们也可以结合使用。接口和抽象类都是实现多态性的手段,具体选择取决于设计的需要和约束。


相关文章
|
9天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
1月前
|
编译器
经典面试题:变量的声明和定义有什么区别
在编程领域,变量的“声明”与“定义”是经典面试题之一。声明告诉编译器一个变量的存在,但不分配内存,通常包含变量类型和名称;而定义则为变量分配内存空间,一个变量必须至少被定义一次。简而言之,声明是告知变量形式,定义则是实际创建变量并准备使用。
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
100 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
29天前
|
前端开发 小程序 JavaScript
面试官:px、em、rem、vw、rpx 之间有什么区别?
面试官:px、em、rem、vw、rpx 之间有什么区别?
31 0
|
2月前
|
Java 关系型数据库 MySQL
面试官:GROUP BY和DISTINCT有什么区别?
面试官:GROUP BY和DISTINCT有什么区别?
85 0
面试官:GROUP BY和DISTINCT有什么区别?
|
3月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
2天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
4天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
21 4
|
1月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
62 2
|
1月前
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
27 0

热门文章

最新文章

下一篇
无影云桌面