浅谈abstract和interface

Spring5.0源码学习系列之浅谈Bean创建过程(六) 提示:在上一章的学习中,我们对BeanFactory的创建过程有了一个熟悉,其实实际的操作不止创建BeanFactory,调用的过程也实现了将xml解析为Document对象,再转换成BeanDefinition(很重要,Spring的Bean),并注册到BeanFactory,接着本文带着疑问学习一下Spring中的Bean(BeanDefinition)是怎么创建实例出来的? 阅读详情

刚看到这两个词,很多人估计都会有一种选择恐惧症,其实,如果真的稍微了解了一下两个的不同之处以后,就不会有那么难的抉择了。

语法上

            从语法上来看,abstract的可以拥有自己的属性和自己的非抽象方法,同时,子类可以覆盖掉父类的一些属性的值。interface只能含有static final的属性和抽象的方法。所以从语法上来看的话 interface其实算一种特殊的abstract。另外,abstract中的方法可以有自己默认的一些行为,但是interface中则没有。


设计上

            从设计上来看,abstract与子类其实是一种"is-a"的关系,但是interface则是“like-a”的关系;interface更多的表达的是一种约束力,不是深层次的父子关系。

例:

      如果我们要设计一款开关,它有两个基本功能,开和关,用abstract和interface的做法:

 

abstract class Switch{
    abstract void open();
    abstract void close();
}

interface Switch{
    void open();
    void close();
}

 现在看,貌似这两个都可以,但是现在我们的客户要求说,现在的开关需要一个扩展功能,就是发亮。那你会怎么做的,一般人想到的基本想法就是:

abstract class Switch{
    abstract void open();
    abstract void close();
    abstract void shine();
}
interface Switch{ 
    void open(); 
    void close(); 
    void shine();
}
 


然后再用子类去继承或者实现上述两个。其实这样操作本身就违背了ISP原则,你将开关的基本功能给扩展了,等以后如果程序只需要开关的基本功能的时候,你会发现维护好麻烦。所以需要改进,改进的方法你会想到三个,一个是用两个abstract来做;一个是两个interface;最后一个是一个abstract,一个interface。我们一个一个来讨论:

首先是两个abstract,因为java的语法机制不允许两个entends,所以直接pass;

接下来是两个interface,如果使用两个interface,你会觉得很纠结,这个东西到底是开关呢还是灯,因为一个中定义着开和关,一个中定义着发亮,所以这里其实需要搞清楚的是你的东西到底是一个怎么样的东西,认清楚这个东西的本质。

最后一种情况是一个abstract,一个interface

abstract class Switch{
    abstract void open();
    abstract void close();
 
}
interface Switch{    
     void shine();
}
这样一看,咦,对了,我要的东西是一个开关,但是它有个扩展功能是发光,合情合理,又满足ISP原则,所以对于这一类问题的选择,我们需要看重的是东西的本质到底是什么。

讲了那么多,也许有些地方讲的不是很清楚或者不对的地方,请私信我,因为我也是刚从新手过来。

学无止境。共勉。



  




UG/NX二次开发实例流程样例(nx1980+vs2019) 以上就是基本操作了,下面进入界面开发流程,nx1980的界面开发操作,也需要在块UI界面编辑器中操作,很多教程都没有讲解这一点,尤其是如何进入块UI界面编辑器,那么我在这里详细说明一下步骤。》,这一篇文章我们将详细讲述,如何开发一个具体的功能——根据用户输入的数据,在特定的点上创建一个指定大小的立方体。可以将文件保存当桌面,笔者保存在桌面的create_block目录中了,如下图所示,可以发现生成了三个文件。4.在新建模型完成后,我们准备创建交互UI,按照下图所示的顺序,找到块UI界面编辑器,。 阅读详情

相关推荐

Wireshark、Fiddler、Charles 三款抓包工具的本质差异与选型指南

抓包工具是网络调试与接口分析的基础能力,其核心在于理解OSI模型分层原理——不同工具工作在不同协议层级,解决不同维度问题。Wireshark面向网络层(L2/L3),可捕获原始数据帧与TCP握手细节,适用于DNS异常、丢包重传等底层问题定位;Fiddler和Charles则工作在应用层(L7),作为HTTP(S)代理实现HTTPS解密、请求改写与弱网模拟,是API调试与移动端测试的首选。技术价值体现在:精准匹配问题域(如证书固定需Fiddler脚本绕过,iOS调试依赖Charles证书信任链),避免‘用显微

weixin_28831341的博客 254

抽象(Abstract)类与接口(interface)

JAVA的抽象类与接口

Tweek_的博客 2006

【实战指南】Jaspersoft Studio + JasperReports:从零构建企业级PDF报表

本文详细介绍了如何使用Jaspersoft Studio和JasperReports从零构建企业级PDF报表。通过可视化设计、数据连接、模板设计到最终输出的全链路支持,这套组合方案显著降低了报表开发的维护成本。文章还提供了开发环境搭建、中文乱码解决方案、Java集成代码及性能优化技巧,适合需要高效生成复杂PDF报表的开发者。

weixin_42666036的博客 247

interface和abstract的区别

interface和abstract的区别

小羊的博客 2236

【笔记篇】Davinci Configurator BswM模块

AUTOSAR BSWM模块配置介绍

weixin_47571898的博客 1534

【一 扣子客户案例合集】【 1.3 识典古籍基于扣子智能助手的古籍数字化全流程技术解析】

古籍数字化智能处理系统全流程解析 本文详细介绍了基于扣子智能助手的古籍数字化解决方案,核心技术包括: 多层级架构设计:采用"云-边-端"三层次架构,整合高精度扫描设备与AI处理模块,实现从物理古籍到结构化数据的全流程自动化。 智能图像处理:通过12道预处理工序(包括畸变校正、污渍去除和对比度增强)处理古籍图像,采用改进的EAST算法和ViT模型实现高精度文字检测与识别,准确率达98.7%。 NLP增强处理:结合Transformer-XL预训练模型和N-gram语言模型进行文本校正,基于

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1442

Java中抽象类 abstract和interface的区别

abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。 abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface的选择显得比较随意。 其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。本文将对它们

Don't Look Down的博客 3308

JMeter 中实现 100 个用户在 3 秒内并发登录

通过以上配置,你可以在 JMeter 中实现 100 个用户在 3 秒内并发登录

南开大学 | 10 年 + 软件研发与测试实战 | 现任企业质控负责人 | 专注端到端交付质量 1682

Abstract和interface

语法4:接口中不允许定义带有方法体的普通方法,但可以通过default关键字定义默认方法。语法5:实现类通过implements关键字实现接口,必须重写接口中定义的抽象方法。语法5:子类通过extends关键字继承抽象类,必须重写抽象类中定义的抽象方法。语法2:接口中允许定义抽象方法,定义时允许省略abstract。语法4:抽象类中允许定义带有方法体的普通方法。语法6:实现类可以同时实现多个接口。语法3:接口中不允许定义构造方法。语法2:抽象类中允许定义抽象方法。语法3:抽象类中允许定义构造方法。

m0_74002833的博客 584

addBumpConnectTargetConstraint 命令详解

本文介绍了Cadence Innovus中用于倒装芯片设计的addBumpConnectTargetConstraint命令的核心功能和使用方法。该命令主要用于为凸点(Bump)添加连接目标约束,通过绑定实例、引脚/网络和端口号等属性,实现凸点与电源/信号网络的精准映射。文章详细解析了命令语法结构、参数说明及使用场景,包括必选参数(指定凸点方式)、分支选择(实例连接或电源连接类型)以及互斥参数(引脚名与网络名)等重要注意事项,并提供了典型应用示例。该命令特别适用于倒装芯片设计中凸点与PG网络、IO实例的连接

u013620135的博客 395

i.MX6ULL系统移植 | 使用busybox制作根文件系统(1.29.0)

一. 下载BusyBox BusyBox是一个继承了大量Linux命令核工具的软件,像常用的ls、cp、mv、ifconfig等命令。一般下载BusyBox的源码,然后配置Busybox,选择自己想要的功能,最后编译即可。 BusyBox在官方可以直接下载:https://www.busybox.net/。目前最新是1.35.0,这里我使用1.29.0版本。 axel https://www.busybox.net/downloads/busybox-1.29.0.tar.bz2 下载之后解压: tar

Mculover666的博客(嵌入式) 1147

抽象类(abstract)和接口(Interface)的区别与联系

抽象类和接口的区别与联系 1.抽象类和接口都不能被实例化; 2.抽象类使用abstract修饰,接口用Interface修饰; 3.抽象类是单继承,一个类只能使用一次继承关系,继承用关键字extends; 接口可以多继承(extends)多实现(interface),多实现的时候用逗号(,)隔开; 4.抽象类里面可以变量,变量可以私有化; 接口里只有常量,默认是public static final,不能被私有化,只能是公开的(public); 5.抽象类可以有抽象方法,只需要声明,并没有方法体

m0_63725962的博客 4933

人工智能---什么是Transformer?

Transformer是一种强大的神经网络架构,最初由Google的研究人员在论文《Attention is All You Need》中提出,用于自然语言处理任务,特别是在机器翻译方面取得了巨大成功。Transformer的核心思想是完全基于自注意力机制(self-attention mechanism)来实现序列到序列(sequence-to-sequence)的学习。它在自然语言处理(NLP)和其他序列到序列任务中表现出色,逐渐成为该领域的主流模型。近些年也逐渐在自动驾驶领域有所应用。

智能汽车人的博客 3955

新手浅谈C#关于abstract和interface

abstract:抽象类,是对某一类对象的抽象,继承抽象类的类和抽象类是属于关系 interface:接口,可以说是一种规范,继承接口的类表达则是,我继承了这个接口,我能做什么 举个常用的例子:抽象一个animal类,马(horse)继承animal类,但是有一种马叫天马,他能飞。 1 public abstract class Animal 2 { 3 pu...

189

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java第二式——浅谈abstract 和 interface

相信大家在进行面试的很大部分程度上一定会被提问道关于抽象类和接口的问题,那么接下里我就简单的为大家进行解释 (参考书上说抽象类和interface如何如何的不容易理解,那么我将用最通俗的说法让各位明白) 个人理解: abstract顾名思义为抽象类,简单的理解为“你是什么?”是对类的抽象(属性和行为) 对应的 interface则仅仅是理解为对行为的抽象,可以理解为“你有没有(什么...

Mr_楠先森的博客 271

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

浅谈abstract class和interface有什么区别

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代...

光辉岁月 264

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

浅谈php 抽象类abstract和接口interface

一、抽象类(abstract) 抽象类定义的规范 1、php5支持抽象类和抽象方法 2、定义得抽象类无法被实例化 3、任何一个类里面声明了抽象方法,那么这个类必须声明为抽象类, 一个抽象类可以没有抽象方法 4、被定义得抽象方法只能声明其调用方式(参数),不能定义其具体得功能实现 5、继续抽象类的子类必须定义父类(抽象类)所有的抽象方法,并且访问控制(public、protected)必...

weixin_30650859的博客 137

浅谈C#中的抽象类(abstract)和接口(interface)

很多C#的初学者在编程时都容易把抽象类和接口搞混,甚至很多编程老鸟也没有弄明白为什么有了抽象类又搞个接口(这里也包括了本老鸟)。所以这里整理了C#抽象类和接口的区别,详细的分析了抽象类与接口的概念与特性,并对二者作出比对说明。

MarcoPro的博客 4729

Java基础概念浅谈(1)——应用层面上interface(接口)和abstract class(抽象类)的区别

学习Spring源码已经有一段时间了,对代码设计有了一些收获,因此记录一下。 我们常用到的类主要分为接口(interface)、抽象类(abstract class)以及实现类(class)。在代码中经常遇到这些java文件,在我学习Spring源码之前,更多是是生搬硬套,例如Dao层、Service层用interface,高级一点就是工厂模式、策略模式用一下interface,如果发现在设计模...

Heykeel的博客 429

博客摘录「 浅谈C#中的抽象类(abstract)和接口(interface)」2023年8月6日

5、接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法,抽象类可以定义属性、字段、包含有实现的方法。抽象类,在面向对象过程中,所有的对象都是类描绘的,反过来,类里面的数据不足以把具体的对象描绘出来,这样的类就是抽象类。3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)10、如果要设计小而简练的功能块,则使用接口,如果要设计大的功能单元,则使用抽象类。3、接口是一组行为规范,抽象类是一个不完全的类,着重于族的概念。4、接口不能被实例化;

weixin_65414269的博客 131

interface、abstract、继承、多态、反射

interface和abstract的区别,可以说abstract是interface的一种特例。 ①abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没...

weixin_42603009的博客 406

浅谈一下JAVA中的接口interface

第一次写博客,怎么说呢?一丝激动,一丝焦虑.激动的是自己终于算是走上IT这条路上的一条小径上了,焦虑的是自己该如何走好这条路.可回过头来仔细想想,还是要认真走好每一步,眼下最重要的还是如何写好这篇博客,一些拙见,希望各位同学,同志给予改正和批评.

soul_pangzi_的博客 235

php中普通类 接口类 抽象类 浅谈

一、普通类 1、关键词:class 类名,继承关键字extends 2、继承:只能实现单继承, 3、多态:子类继承可以实现多种功能 4、封装:类有权限机制,私有的只能自己用,受保护的可以被继承,子类的权限必须大于等于父类 5、实例化:可以被实例化 二、接口类 1、关键词 :interface 类名 ,继承关键字implements 2、继承:可以实现多继承,父类有的方法...

weixin_30488085的博客 184

浅谈C# 多态的魅力(虚方法,抽象,接口实现)

浅谈C# 多态的魅力(虚方法,抽象,接口实现)2014-02-08 11:29 2483人阅读 评论(2) 收藏 举报 分类: C#(188) asp.net(179) 浅谈C# 多态的魅力(虚方法,抽象,接口实现)前言:我们都知道面向对象的三大特性:封装,继承,多态。封装和继承对于初学者而言比较好理解,但要理解多态,尤其是深入理解,初学者往往存在有很多困惑,为什么这样就可以?有时候感觉很不可思议

288

JVM的基本原理和class文件结构(浅谈)

本篇主要讲解了JVM对class的文件结构的一个读取翻译过程,对class的文件结构的魔数、版本号、常量池计数器、常量池、常量池表、接口计数器、接口集合(表结构)、字段计数器、字段(表结构)、方法计数器、方法(表结构)、属性计数器、属性(表信息)的结构化分析。

橙子的随笔集 287

【课程设计】基于Python音乐分类系统 毕业设计 250858

目 录摘要 1 绪论 1.1研究背景与意义 1.2开发现状 1.3系统开发技术的特色 1.4论文结构与章节安排 2 基于Python音乐分类系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.3.2数据修改流程 2.3.3数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 基于Python音乐分类系统总体设计 3.1 系统架构设计 3.2 系统功能模块设计 3.2.1整体功能模块设计 3.2.2用户

WeiXin_DZbishe的博客 4435
上一篇: 静态页面中JS拿取本地的IP
下一篇: Spring MVC 前台get请求的时候controller中拿到中文字符乱码
阿尔卑斯0283
博客等级 码龄14年 51粉丝 103原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值