面试题008:抽象类和接口的区别

相同点:

  1. 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其它类实现和继承

  2. 接口和抽象类都可以有抽象方法,而实现接口或继承抽象类的普通子类都必须实现这些抽象方法

不同点:

  1. 接口里只能包含抽象方法和默认方法,不能为普通方法提供方法实现;抽象类则可以包含普通方法。

  2. 接口里只能定义静态常量,不能定义普通成员变量;抽象类里既可以定义普通成员变量,也可以定义静态常量

  3. 接口里不包含构造器;抽象类可以包含构造器,但抽象类的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作

  4. 接口里不能包含代码块,抽象类则可以包含代码块

  5. 一个类最多只能有一个父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承的缺点

作用的不同:

接口作为系统与外界交互的窗口,体现了一种规范。对于接口的实现者来说,接口规定了实现者必须向外提供哪些服务;对于接口的调用者而言,接口规定了调用者可以调用哪些服务,以及如何调用这些服务。当在一个程序中使用接口时,接口是多个模块间的耦合标准;当在多个应用程序之间使用接口时,接口是多个程序之间的通信标准。

抽象类作为系统中多个子类的共同父类,它体现的是一种模板式设计。抽象类作为多个子类的父类,它可以被当作系统实现过程中的中间产品,这个中间产品已经实现了系统的部分功能,但这个产品依然不能当作最终产品,必须要有更进一步的完善。这种完善可能有几种不同方式,需要通过子类实现。

相关推荐
于越海14 分钟前
材料电子理论核心四个基本模型的python编程学习
开发语言·笔记·python·学习·学习方法
李坤林17 分钟前
Android Binder 详解(4) Binder 线程池
android·java·binder
代码方舟19 分钟前
Java后端实战:构建基于天远手机号码归属地核验的金融级风控模块
java·大数据·开发语言·金融
我命由我1234520 分钟前
开发中的英语积累 P26:Recursive、Parser、Pair、Matrix、Inset、Appropriate
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
困知勉行198522 分钟前
springboot整合redis
java·spring boot·redis
wuk99825 分钟前
基于MATLAB实现栅格地图全覆盖移动路径规划
开发语言·matlab
颜淡慕潇26 分钟前
深度解析官方 Spring Boot 稳定版本及 JDK 配套策略
java·后端·架构
北岛寒沫35 分钟前
北京大学国家发展研究院 经济学原理课程笔记(第二十三课 货币供应与通货膨胀)
经验分享·笔记·学习
中年程序员一枚37 分钟前
Springboot报错Template not found For name “java/lang/Object_toString.sql
java·spring boot·python
幽络源小助理1 小时前
PHP虚拟商品自动发卡系统源码 – 支持文章付费阅读与自动发货
开发语言·php