接口vs抽象类、继承vs组合,他们之间有啥关系

简介: 接口vs抽象类、继承vs组合,他们之间有啥关系

正文


接口实现类,继承和组合他们之间的关系是非常重要的,或许,你现在编写代码感受不到,但是用到的时候,就会感觉,以前的设计者们的智慧。

在开始说一下比较编程的技巧之前,一起来看一看他们之前的区别吧!


接口和抽象类


抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点:

a、抽象类不能被实例化只能被继承;

b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;

c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;

d、一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类;

e、抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。

接口:Java中接口使用interface关键字修饰,特点为:

a、接口可以包含变量、方法;变量被隐示指定为public static final修饰的,方法被隐示指定为public abstract(JDK1.8之前);

b、接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题;

c、一个类可以实现多个接口;

d、JDK1.8中对接口增加了新的特性:

(1)、默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;(2)、静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。


继承和组合


继承与组合都是面向对象中代码复用的方式。继承,父类的内部细节对子类可见,其代码属于白盒式的复用,而组合中,对象之间的内部细节不可见,其代码属于黑盒式复用。继承在编码过程中就要指定具体的父类,其关系在编译期就确定,而组合的关系一般在运行时确定。继承强调的是is-a的关系,而组合强调的是has-a的关系。


编程技巧:在编写代码的同时,如果有多个类需要调用一个公共的代码片段,这个时候,可以有2种选择来提取公共的方法。第一种:写一个公共的类,之后,用到的他的地方,分别进行引入。第二种的方式,是写一个抽象类,进而采用采用继承的方式调用他。如何选择呢?如果这个共同的代码,与需要调用他的代码关联性比较强的时候,这个时候,应该采用继承抽象类的方式实现。如果关联性不强,而且有动态改变对象的时候,这个时候,应当使用第一种的方式实现。


重要的地方:在选择如何使用组合还是继承的时候,应优先选择组合的方式,不应该选择继承的方式,因为继承的方式是属于白盒式复用,可以直接修改原来的数据结构,这样做是非常不安全的,下面给出一个以前分析的以前文章。

相关文章
|
算法 测试技术 开发工具
编写高效技术文档的艺术:C++项目实践指南
编写高效技术文档的艺术:C++项目实践指南
403 0
|
算法 Shell 计算机视觉
【特效】对实时动态人脸进行马赛克及贴图马赛克处理及一些拓展
【特效】对实时动态人脸进行马赛克及贴图马赛克处理及一些拓展
630 0
|
安全 物联网 5G
无线网络技术:5G之后的通信革命
【10月更文挑战第16天】本文探讨了5G之后无线网络技术的发展趋势,涵盖5G-A、Wi-Fi 7及未来通信技术展望。5G-A提升了网络速度、时延和连接数,Wi-Fi 7则在性能和可靠性上大幅跃升,未来通信技术将朝向更高速度、更低延迟、更广覆盖方向发展。
|
12月前
|
人工智能 IDE Java
寻找通义灵码 AI 程序员 {头号玩家} ,体验 QwQ-Plus、DeepSeek 满血版的通义灵码
通义灵码联合 CHERRY 中国全网发起寻找 AI 程序员 {头号玩家},体验全新模型加持下的 AI 程序员的智能编码新功能,体验图生代码 Agent、单元测试 Agent 、跨语言编程等 AI 程序员能力,赢取通义灵码 X CHERRY 联名定制个人签名款机械键盘 、CHERRY MX8.3 旗舰级机械键盘、CHERRY 无线双模鼠标、码力全开蛇皮袋等奖品!
|
运维 监控 网络安全
ClientAliveCountMax设置0可以吗
在决定"clientalivecountmax"或类似并发控制机制时,务必进行充分的测试与评估,确保既能满足业务连续性要求,又能有效管理资源。访问[专业云服务提供商,了解更多关于优化服务器配置、提升网络应用性能的专业知识与解决方案,帮助您在复杂的网络环境中做出更明智的选择。
412 0
|
监控 测试技术 项目管理
我理解的技术PM
我理解的技术PM
318 8
|
设计模式 JavaScript 前端开发
Web Components详解-组件通信
Web Components详解-组件通信
426 6
|
XML Android开发 数据格式
Android AppCompatActivity 方法详解
Android AppCompatActivity 方法详解
549 0
|
机器学习/深度学习 JSON 自然语言处理
[GPT-1]论文实现:Improving Language Understanding by Generative Pre-Training
[GPT-1]论文实现:Improving Language Understanding by Generative Pre-Training
627 1
|
数据采集 自然语言处理 数据可视化
基于python数据挖掘在淘宝评价方面的应用与分析,技术包括kmeans聚类及情感分析、LDA主题分析
本文探讨了基于Python数据挖掘技术在淘宝评价分析中的应用,涵盖了数据采集、清洗、预处理、评论词频分析、情感分析、聚类分析以及LDA主题建模和可视化,旨在揭示淘宝客户评价中的潜在模式和情感倾向,为商家和消费者提供决策支持。
543 0