接口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种选择来提取公共的方法。第一种:写一个公共的类,之后,用到的他的地方,分别进行引入。第二种的方式,是写一个抽象类,进而采用采用继承的方式调用他。如何选择呢?如果这个共同的代码,与需要调用他的代码关联性比较强的时候,这个时候,应该采用继承抽象类的方式实现。如果关联性不强,而且有动态改变对象的时候,这个时候,应当使用第一种的方式实现。


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

相关文章
|
算法 Shell 计算机视觉
【特效】对实时动态人脸进行马赛克及贴图马赛克处理及一些拓展
【特效】对实时动态人脸进行马赛克及贴图马赛克处理及一些拓展
511 0
|
数据采集 人工智能 安全
数据治理的实践与挑战:大型案例解析
在当今数字化时代,数据已成为企业运营和决策的核心资源。然而,随着数据量的爆炸性增长和数据来源的多样化,数据治理成为了企业面临的重要挑战之一。本文将通过几个大型案例,探讨数据治理的实践、成效以及面临的挑战。
1712 4
数据治理的实践与挑战:大型案例解析
|
8月前
|
人工智能 IDE Java
寻找通义灵码 AI 程序员 {头号玩家} ,体验 QwQ-Plus、DeepSeek 满血版的通义灵码
通义灵码联合 CHERRY 中国全网发起寻找 AI 程序员 {头号玩家},体验全新模型加持下的 AI 程序员的智能编码新功能,体验图生代码 Agent、单元测试 Agent 、跨语言编程等 AI 程序员能力,赢取通义灵码 X CHERRY 联名定制个人签名款机械键盘 、CHERRY MX8.3 旗舰级机械键盘、CHERRY 无线双模鼠标、码力全开蛇皮袋等奖品!
|
11月前
|
SQL 监控 安全
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
195 1
|
运维 监控 网络安全
ClientAliveCountMax设置0可以吗
在决定"clientalivecountmax"或类似并发控制机制时,务必进行充分的测试与评估,确保既能满足业务连续性要求,又能有效管理资源。访问[专业云服务提供商,了解更多关于优化服务器配置、提升网络应用性能的专业知识与解决方案,帮助您在复杂的网络环境中做出更明智的选择。
316 0
|
监控 测试技术 项目管理
我理解的技术PM
我理解的技术PM
252 8
|
设计模式 JavaScript 前端开发
Web Components详解-组件通信
Web Components详解-组件通信
356 6
|
XML Android开发 数据格式
Android AppCompatActivity 方法详解
Android AppCompatActivity 方法详解
468 0
|
数据采集 自然语言处理 数据可视化
基于python数据挖掘在淘宝评价方面的应用与分析,技术包括kmeans聚类及情感分析、LDA主题分析
本文探讨了基于Python数据挖掘技术在淘宝评价分析中的应用,涵盖了数据采集、清洗、预处理、评论词频分析、情感分析、聚类分析以及LDA主题建模和可视化,旨在揭示淘宝客户评价中的潜在模式和情感倾向,为商家和消费者提供决策支持。
446 0
|
机器学习/深度学习 JSON 自然语言处理
[GPT-1]论文实现:Improving Language Understanding by Generative Pre-Training
[GPT-1]论文实现:Improving Language Understanding by Generative Pre-Training
557 1