当前位置: 首页 > news >正文

抽象类和接口

抽象类和接口

  • 抽象类和接口的定义

    • 抽象类主要用来抽取子类的通用特性,作为子类的模板,它不能被实例化,只能被用作为子类的超类。

    • 接口是抽象方法的集合,声明了一系列的方法操作,如果一个类实现了某个接口,那么它必须实现这个接口的所有抽象方法。

  • 抽象类和接口设计的目的

    • 接口的设计目的,是对类的行为进行约束(更准确的说是一种“有”约束,因为接口不能规定类不可以有什么行为),也就是提供一种机制,可以强制要求不同的类具有相同的行为。它只约束了行为的有无,但不对如何实现行为进行限制。

    • 而抽象类的设计目的,是代码复用。当不同的类具有某些相同的行为(记为行为集合A),且其中一部分行 为的实现方式一致时A的非真子集,记为B),可以让这些类都派生于一个抽象类。在这个抽象类中实现了B,避免让所有的子类来实现B,这就达到了代码复用的目的。而A减B的部分,留给各个子类自己实现。正是因为A-B在这里没有实现,所以抽象类不允许实例化出来(否则当调用到A-B时,无法执 行)。

  • 抽象类和接口的区别

    • 抽象类和接口都用于抽象化具体对象的,都不能直接实例化,但是两者的侧重点不同:抽象类主要用来抽象类型,表示这个对象是什么;接口主要用来抽象功能,表示这个对象能做什么;

    • 接口可以看成抽象类的变体,所有方法都是抽象的,因此接口只能做方法的声明,不能有方法的实现;而抽象类可以有默认的方法实现,既可以做方法的声明,也可以做方法的实现;

    • 接口可以继承多个接口,抽象类不可以多继承类,但可以单继承类或多实现接口。

    • 抽象方法和接口函数都不能使用static修饰。抽象方法的访问修饰符可以是public、protected和default,不能是private;接口的默认访问修饰符为public,不能使用其他修饰符。

    • 接口的变量只能是不可变常量,默认修饰符都是public static final;但是抽象类的变量可以是普通变量

    • 抽象类可以有构造器,接口不能有构造器。

    • 接口实现类必须实现接口中的所有声明的方法,但抽象类的子类可以部分实现父类的抽象方法,但如果子类不能全部实现抽象方法,那么该子类只能是抽象类;

    • 与正常Java类的相比,抽象类除了不能实例化之外,和正常Java类没有任何区别,但接口和正常Java类是完全不同的类型。

    • 抽象类和接口是Java语言中两种不同的抽象概念,他们的存在对多态提供了非常好的支持,虽然他们之间存在很大的相似性。抽象类的功能远远超过接口,但是定义抽象类的代价比较高。因为每个类只能继承一个类。因此,在这个抽象类中,你必须编写出其子类的所有共性。虽然接口在功能上会弱化很多,但是他只是针对一组动作的描述,而且可以在一个类中同时实现多个接口,因此在设计阶段会降低难度。

  • 抽象类和接口的应用场景

    • 当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

http://www.lryc.cn/news/14565.html

相关文章:

  • STM32DSP库汇总
  • C++类和对象----思想基础应用
  • ​力扣解法汇总1792. 最大平均通过率
  • 动手学深度学习(第二版)学习笔记 第二章
  • CMake构建静态库与动态库以及使用
  • Linux 系统目录结构
  • stable diffusion webui安装与使用(官方超简单教程)
  • 机器学习:学习k-近邻(KNN)模型建立、使用和评价
  • Hive Sampling 抽样函数:Random随机抽样、Block 基于数据块抽样、Bucket table 基于分桶表抽样
  • 2023年中职网络安全竞赛跨站脚本渗透解析-1(超详细)
  • 虚拟 DOM 详解
  • Delphi Http Https 最好的解决方法(一)
  • Allegro无法打开10度走线命令的原因和解决办法
  • Frequency Domain Model Augmentation for Adversarial Attack
  • react源码中的协调与调度
  • 如何快速、全面、深入地掌握一门编程语言
  • python五子棋代码最简单的,python五子棋代码画棋盘
  • C++ 智能指针的原理:auto_ptr、unique_ptr、shared_ptr、weak_ptr
  • 二叉树前中后层次遍历,递归实现
  • 【RA4M2系列开发板GPIO体验2按键控制LED】
  • 初步介绍CUDA中的统一内存
  • UVM实战--加法器
  • Linux系统点亮LED
  • 在superset中快速制作报表或仪表盘
  • 【可视化实战】Python 绘制出来的数据大屏真的太惊艳了
  • Obsidium一键编码作业,Obsidia惊人属性
  • 约束优化:约束优化的三种序列无约束优化方法
  • RocketMQ快速入门:消息发送、延迟消息、消费重试
  • FANUC机器人通过KAREL程序实现与PLC位置坐标通信的具体方法示例
  • [蓝桥杯 2015 省 B] 移动距离