[DP]为什么我们使用继承呢?

【dp】NOIP2010提高组乌龟棋 【问题描述】 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数)。棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点。乌龟棋中M张爬行卡片,分成4种不同的类型(M张卡片中不一定包含所有4种类型的卡片,见样例),每种类型的卡片上分别标有1、2、3、4四个数字之一,表示使用这种卡片后,乌龟棋子将向前爬行相应的格子 阅读详情

今天看设计模式的时候突然想到,为什么我们要用继承呢?

很多人可能会说:

(1)继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
(2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
(3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
(5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。


我觉得很对的。


举个例子:

人,可以说话可以跑可以跳  我这里说正常的人,一个鼻子一个嘴的那种。 

男人,首先也是人,所以应该继承自人,一个鼻子一个嘴。 同样可以跑跳说话。但是不同的是 我有胡子,我可以举重。

女人,当然也是人,一个鼻子一个嘴,跑跳说话,好吧还有大胸,可以做手工。

如果我们用代码写出来是什么样子呢?

 class Human {
	Nose nose;
	Mouth mouth;
	public void run() {}
	public void speak() {}
	public void jump() {}
}

class Man extends Human {
	Mustache mustache;
	public void lift(){};
}

class Woman extends Human {
	Breast breast;
	public void handcraft(){};
}

很好就是这样的。

我们发现了什么? Human封装了共有属性和方法,而Man 和Woman封装了独特的属性和方法。满足上述的1,2,3,4

抽取共性,分散特性。


在实际开发中我们该如何应用这一准则呢?

1.找出应用中不变的部分,nose,mouth,run(),jump(),speak()。

2.找出应用中变化的部分,独立出来,这里的 mustache 和 breast 就是,lift()和handcraft()也是。所以被独立出来。

3.将不变的部分放入父类,变化的部分放入子类。



但是类继承也有一些不足之处。首先,因为继承在编译时刻就定义了,所以无法在运行 时刻改变从父类继承的实现。更糟的是,父类通常至少定义了部分子类的具体表示。因为继 承对子类揭示了其父类的实现细节,所以继承常被认为破坏了封装性。

当你需要复用子类时,实现上的依赖性就会产生一些问题。如果继承下来的实现不适合 解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最 终限制了复用性。一个可用的解决方法就是只继承抽象类,因为抽象类通常提供较少的实现。 



PLS-SEM(偏最小二乘路径建模)模型拟合优度指标 PLS-SEM(偏最小二乘路径建模)是一种基于方差的分析方法,侧重于预测导向,通过迭代优化路径系数和外部权重来最大化潜变量的解释方差(R²)。其评估指标分为外部测量模型和结构模型两部分:外部测量模型关注潜变量与显变量的关系,通过标准化载荷(>0.7)、信度指标(Cronbach’s α、复合信度CR>0.7)、聚合效度(AVE>0.5)和区分效度(Fornell-Larcker标准、HTMT<0.85)来评估模型的可靠性和有效性。结构模型则检验潜变量间的因果关系,通过路径系数(β值) 阅读详情

相关推荐

拯救者R9000P-2021-AMD5800H黑苹果EFI配置与优化指南

本文详细介绍了在联想拯救者R9000P 2021款(搭载AMD锐龙7 5800H处理器)上安装和优化黑苹果系统的完整指南。内容涵盖EFI配置、OpenCore引导设置、关键驱动(如NootedRed核显驱动)的调整,以及安装后的性能调优与常见问题解决,旨在帮助开发者和极客用户在这款游戏本上搭建稳定可用的macOS开发环境。

weixin_29291069的博客 283

Qt界面UI文件的使用与界面继承问题

QT的UI如何加入到程序中来?xxx.ui文件是一个xml文件,描述了ui属性,包括ui路径,名称,尺寸等信息,这个文件可由ui设计工具qtdesigner生成;但是要想在程序中使用ui,需要通过uic.exe和xxx.ui生成一个ui_xxx.h文件。cmd中cd到xxx.ui所在的路径,输入uic.exexxx.ui-oui_xxx.h。可以使用不同的ui文件进行界面代码的继承,然后将ui.setupUI(this)写到一个虚函数中去。...

kupePoem的专栏 5763

扣子(coze)实战|手把手教你搭建AI换装自动化工作流

摘要:本文介绍了使用Coze平台搭建AI换装工作流的详细教程。工作流包含模特图片上传、服装替换、任务提交和智能轮询等模块,通过change_model插件实现异步换装处理,并内置30秒循环查询机制。该工具支持自定义API密钥对接不同AI服务商,目前已上线共享空间并提供会员服务(59.8元/年)和VIP课程(499元/年),包含100+智能体和实战案例资源。完整体验地址见文中链接。

yueyehuguang的博客 1843

继承、实现、依赖、关联、聚合、组合,一文看懂

1)集成、实现,两种关系比较简单,表示的是类与类、接口与接口之间的纵向关系;2)依赖、关联、聚合、组合,则表示的是类与类、类与接口之间的引用、横向关系。依赖 < 关联 < 聚合 < 组合。

weixin_48350374的博客 1544

MS2107 CVBS转USB2.0 音视频采集芯片,支持1080P@30HZ输出

MS2107 是一款视频和音频采集芯片,支持CVBS转USB2.0 ;可以将 CVBS、S-Video 和音频信号通过 USB接口传送到 PC、智能手机和平板电脑上预览或采集。

TEL18967112838的博客 2075

MMI分束器仿真优化:用Lumerical FDTD实现95%耦合效率的实战技巧

本文详细介绍了使用Lumerical FDTD软件对MMI分束器进行仿真优化的实战技巧。通过构建高保真模型、精确配置光源与边界条件,并重点优化波导结构与taper设计,系统性地将器件的耦合效率提升至95%以上。文章还分享了利用参数扫描、varFDTD加速等高级方法,帮助硅光芯片设计工程师高效实现高性能MMI分束器设计。

rainy的博客 772

32. 为什么需要继承?什么时候应该继承?

1. 为什么需要继承? 使用继承可以有效实现代码的复用,避免重复代码的出现 当两个类具有相同的特征(属性)和行为(方法)时,可以相同的部分抽取出来放到一个类中作为父类,其他两个类继承这个父类。 继承实现了面向对象的原则:write once,only once(编写一次,且编写一次) 2. 如何实现继承? 在Java语言中,用extends(扩展)关键字来表示一个类继承了另一个类。 在父类中只定义了一些通用的属性和方法。 子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法。或子类重新定义父类

zhu_fangyuan的博客 2649

3D Slicer5.7在win11下的源码编译安装

本博客主要参考官方安装文档以及部分优快云的博客,部分内容的书写会直接参考官方文档的内容。

Topsort的博客 4759

为什么要使用继承,使用继承的优点和缺点是什么

为什么要使用继承,使用继承的优点和缺点是什么 优点:1.可以使用父类的所有非私有bai方法;而且单继承可由接口来du弥补。 2.可以继承父类中定义的成员方法以及成员变量,使得子类可以减少代码的书写。还可以重写父类的方法以增加子类的功能。 缺点:1.耦合性太大 2.就是破坏了类的封装性,其实继承一般多用于抽象方法的继承和接口的实现 ...

li000624的博客 3743

纳米尺度仿真软件:GROMACS_(3).分子动力学模拟原理

分子动力学(MD)模拟是一种强大的计算方法,通过数值积分牛顿运动方程,追踪粒子在时间上的位置和速度变化,提供关于体系动力学行为的详细信息。选择合适的力场、设置初始条件、应用边界条件、控制温度和压力、选择合适的时间步长、计算能量和力,是 MD 模拟的关键步骤。通过这些步骤,可以对各种化学、生物和材料体系进行模拟和分析,揭示其结构、动力学和热力学性质。高级应用如反应路径模拟和蛋白质折叠研究,进一步扩展了 MD 模拟的应用范围。

kkchenjj的博客 1100

把 SNC 支持的通信链路一次讲透,SAP GUI、RFC、CPIC、SAProuter 到底谁在保护谁

摘要: SNC(Secure Network Communications)是SAP系统中用于保护特定通信链路的安全机制,主要应用于DIAG、RFC、CPIC等SAP协议,而非HTTP等互联网协议(后者由SSL/TLS处理)。其核心在于保护通信端点之间的逻辑链路,需在发起方和接收方同时配置SNC参数,包括SNC名称、保护等级(QoP)等。实际项目中,SNC的配置涉及多个层面,如SAP GUI到ABAP平台的登录链路、外部程序通过RFC/CPIC连接ABAP的认证、ABAP系统间的跨系统通信等。配置不当可能导

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 250

084 为什么要使用继承

一、为什么要用继承 使用继承可以减少代码的冗余 两个类实例化两个对象的时候,两个对象具有相同的属性或者相同的方法时,可以把相同的属性或方法在抽取出来定义一个新的基类,用之前的两个类来继承这个新的基类 class Person: school = 'oldboy' def __init__(self,name,age): self.name = name...

aiweiepffo33345的专栏 228

实现边缘实时动物检测:YOLOv5模型优化与树莓派4B部署全攻略

本文介绍了基于高性能计算机训练YOLOv5目标检测模型,并部署到树莓派4B实现实时动物检测的全流程。主要内容包括:1)在高性能计算机上通过Anaconda创建虚拟环境,安装YOLOv5项目并进行模型训练;2)将训练好的best.pt模型迁移到树莓派,配置轻量级Miniconda环境;3)连接树莓派摄像头,运行实时检测程序。该系统兼顾了训练效率和边缘设备部署的实用性,可广泛应用于智慧农业、生态监测等场景。文中详细说明了数据准备、环境配置和部署步骤,为开发轻量级目标检测系统提供了完整参考方案。

m0_64661770的博客 201

长链剖分优化dp三例题

  首先,重链剖分我们有所认识,在dsu on tree和数据结构维护链时我们都用过他的性质。   在这里,我们要介绍一种新的剖分方式,我们求出这个点到子树中的最长链长,这个链长最终从哪个儿子更新而来,那个儿子就是所谓的“重儿子”,也可以叫长儿子。   我们的做法就是,在统计一个点的信息时,对于重儿子,我们直O(1)接继承它的答案(这里有指针技巧,只能看代码,不可言传),对于轻儿子我们暴...

weixin_30550271的博客 149

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Android--自定义控件( 菜鸟学习笔记)

px,dp,sp,dip 概念 px:像素点。因手机屏幕像素而异,无法做到普遍适用。 dp:与像素密度密切相关,显示效果不会因手机屏幕不一样。 sp:相当于dp(用来修饰文字)。 dip = dp(以前使用dip单位)。 用法 文字的尺寸一律用sp单位。 非文字的尺寸一律用dp为单位。 3.偶尔使用px单位。例如用需要在屏幕上画一条细的分割线:1px 。 Inflater LayoutIn...

qq_43012411的博客 235

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

图片切换器+dp--->sp--->px 的单位转换器

这几天一直在整理组件想留着以后使用.还是一点一点整理吧.今天把上周整理的 ImageSwitcher 和单位转换器(dp/sp/px). 下面上内容 ImageSwitcher: 图像查看器,好像是老组件了,今天先更一个基础的组件,后期如果有时间继续扩展. 那么图像查看器,就是和 Windows 系统下的图片查看器比较类似.自带上一张和下一张的功能. 这个组件有以下

余杭探险家 1531

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

用于继承的 singleton (在C++中)

DP中提出的singleton模式不可以被用来当做继承基类的,每次要按照singleton的规则来设计一个singleton类是很痛苦的事,特别是当程序中singleton频繁出现的时候。MCD中的singleton也是外包的,这是一个singleton被用做基类的实现,不过跟语言相关了,用在C++中是没有问题的。下面是该模板类的实现:templateclass Singleton{pri

sogald_2001的专栏 1061

第五十六天|dp

递推公式还是和s[i-1]和j[i-1]是否相等有关.如果相等则dp[i][j]继承dp[i-1][j-1].如果不等,则需要考虑三种情况,一种是删除:,所对应的就是dp[i][j-1]+1.还有一种是增加,对应的就是删除t,那么对应的就是dp[i-1][j]+1.除此之外. 还有replace操作,对应的就是dp[i-1][j-1]+1,三者取最小即可。首先dp[i][j]代表的是s中的到i-1为止最少匹配到t的j-1的字符所需要的最少操作次数。这道题本质上和上一道题是一样的,

weixin_43880126的博客 81

NOIP模拟赛地球发动机

题解: 这道题显然可以看出是DP因为不难观察出是要继承对吧,然后呢发现每个去继承前面的复杂度会爆掉,所以就从最后一个开始维护啦 #include<bits/stdc++.h> using namespace std; long long f[100005]; int a[100005],p[100005],x[100005]; int read() { int num=0,f=1;...

聂泽宇的blog 253

背包问题1

在计算dp的时候要做到考虑上一次这个物品在比当前容量小的数值 加上当前物品价值 与 不放当前物品的价值。在计算的时候dp只需考虑当前为上一行的数值 与 当前位上一行的减去当前容量的价值加上当前物品的价值。在计算dp的时候不用考虑继承,再增加一个for循环就可以做到从1到当前物品数量的遍历。前提是当前容量能放的下物品i。前提是当前容量能放的下物品i。dp只需要计算与当前位的比较。否则就直接继承上一行的数值。否则就直接继承上一行的数值。完全背包 考虑继承问题。

fjktaonruo的博客 177

洛谷P5468(DP)回家路线

蒟蒻竟然能过一题,可能数据比较水qwq 我们选择dp f[i][j]f[i][j]f[i][j] 表示 在 时间 jjj 到达 iii 点 最小的烦躁值 所以f[edge[i].y][edge[i].q]=minf[edge[i].y][edge[i].q]=minf[edge[i].y][edge[i].q]=min(f[edge[i].x][j]+val(edge[i].p−jf[edge[i...

zwjqwq的博客 229

【CF1009F】Dominant Indices(长链剖分优化DP)

点此看题面 大致题意: 设\(d(x,y)\)表示\(x\)子树内到\(x\)距离为\(y\)的点的个数,对于每个\(x\),求满足\(d(x,y)\)最大的最小的\(y\)。 暴力\(DP\) 首先让我们来思考如何暴力\(DP\)。 这应该还是比较简单的吧。 直接设\(f_{x,i}\)表示在\(x\)的子树内,到\(x\)的距离为\(i\)的点的个数。 则不难推出转移方程: \[f_{x,0}...

weixin_30337157的博客 162

区间DP解决回文子串删除问题

动态规划(DP)是解决最优化问题的经典方法,其中区间DP特别适用于处理序列分段问题。其核心原理是将问题分解为子区间,通过状态转移方程逐步构建最优解。在算法竞赛中,区间DP常用于解决石子合并、矩阵链乘法等问题。本文以Codeforces 607B为例,探讨如何运用区间DP求解最少删除回文子串次数的问题。通过定义dp[i][j]表示删除区间[i,j]的最少操作次数,并设计特殊的状态转移方程处理回文子串的嵌套和拼接情况,展示了算法在字符串处理中的实际应用价值。该解法时间复杂度为O(n^3),适用于常见竞赛数据规模

weixin_33913332的博客 398

最全面和简单适配屏幕工具AutoLayout的使用教程

最全面和简单适配屏幕工具AutoLayout的使用教程!2016年12月07日 22:13:25阅读数:1714 万能适配器,AutoLayout使用!前言:每当我们写好代码,调试布局会发现,每款手机显示的布局效果有时候不尽人意,这是因为我们在写代码时,只针对了调试机型屏幕做了设计,而没有考虑到每个手机适...

daimengs的博客 554

GeekBand第三周 3.1 自定义控件

px:像素点 dp:根据实际像素调整 sp:相当于dp(用来修饰文字) dip:=dp 文字一律用sp, 非文字一律dp 特殊情况用px,比如画一条特别细的线的分割线1px hdpi,mdpi,xhdpi可以看里面的ic_launcher看相关倍数关系 Inflater---->把XML解析成VIEW LayoutInflater获得的方法,三种!

sjj_1999的博客 265
上一篇: [Spring]<context:annotation-config/>注册的BeanPostProcessor
下一篇: [DP]Desigin Pattern Overview
HeapStackk
博客等级 码龄12年 11粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值