首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

像这样使用继承是正确的吗?

继承是面向对象编程中的一种重要概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。继承可以提高代码的重用性和可维护性,但在使用时需要谨慎考虑。

在一般情况下,使用继承是合理且正确的。通过继承,子类可以继承父类的属性和方法,并且可以在此基础上进行扩展和修改。这样可以减少重复代码的编写,提高开发效率。

然而,滥用继承可能导致代码的耦合性增加,使得代码难以理解和维护。因此,在使用继承时需要遵循一些原则:

  1. 单一职责原则:每个类应该只有一个单一的功能,避免一个类承担过多的责任。
  2. 里氏替换原则:子类应该能够替换父类并且不影响程序的正确性。
  3. 开闭原则:对扩展开放,对修改关闭。子类应该通过扩展父类来实现新的功能,而不是修改父类的代码。
  4. 合理的继承层次:避免过深的继承层次,过多的继承关系会增加代码的复杂性。

综上所述,使用继承是一种正确的编程方式,但需要遵循一些原则来保证代码的可维护性和可扩展性。在实际开发中,可以根据具体情况来决定是否使用继承,或者选择其他设计模式来替代继承。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

继承代码复用最佳方案

在客户端代码使用时,面对子类,这种继承叫实现继承: Child object = new Child(); 还有一种看待继承角度:从父类往下看,客户端使用时,面对父类,这种继承叫接口继承: Parent...这样,若我需要有个获取产品信息地方,它不必非得个服务,我无需继承任何类。 获取产品信息、生成报表两件事,只是因为在生成报表过程,需要获取产品信息,所以,它有个基类。...这样处理只会影响这里一个对象,而同样这个ReportService其他实例,则完全不受影响。 好处 不必写那么多类,根据需要,在程序运行时组合出不同对象。...4 DCI 继承OOP原则之一,但编码实践中能用组合尽量使用组合。 DCI也是一种编码规范,对OOP一种补充,核心思想也是关注点分离。...DCI对象Data数据, 对象使用Context场景, 对象Interaction交互行为三者简称, 一种特别关注行为模式(可对应GoF行为模式),而MVC模式一种结构性模式,DCI可使用演员场景表演来解释

58150

科技改革让生活更美好,这样

当机器人快递员和无人超市新闻出现之后,更有许多人在担忧,未来工作和职位是否会被AI取代?如果说前者考虑得还比较深远的话,后者担心则是近在咫尺。...高晓松在昨天“思想2018”跨年晚会上发表了他观点。他认为,担心被AI取代只是杞人忧天。从历史角度看来,科技带来改革,一向只是令人类生活更加美好。...而这种担忧出现,源于人类“总是以过去资源来考虑未来”。这样观点没有发展性。 然而,就各国政府看来,事情可不是这么一回事儿。...这意味着,以后体力劳动将不再值钱,面临失业风险,未来可以保有一席之地而不被侵略,将是用脑力工作地方。...以上图片源于网络 事实上,AI在很大成度上发展了生产力,我们不可能中断对AI研究,所以将来脖子以下工作会被取代阵痛必将来到

64250

这样使用Sitecore,才能正确打开全渠道营销!

全渠道营销最近在数字营销中时常被提到概念,不同于多渠道强调在某一个渠道完成某一类互动和交易,全渠道营销强调以用户为中心,从多个渠道挖掘数据,了解客户行为,捕抓用户喜好,进而生成针对个体内容体验。...这种数字营销方式,在竞争激烈的当下,更容易赢得用户喜爱,想当然它也更容易得到品牌青睐。 “在这样市场需求背景下,以提供个性化体验闻名Sitecore成为人们竞相追逐产品,也就不难理解了。...在我们近期工作中就能明显地感觉得到,随着全渠道营销被越来越多企业认可,咨询和实施Sitecore用户量也实现了成倍增加,”有着多年Sitecore开发与实施经验睿哲信息,对于人们对Sitecore...这就是Sitecore可以实现全渠道营销,相较于多渠道营销,Sitecore全渠道营销是以客户为中心,积极地融合多个渠道,无论客户接触品牌网站、社交媒体平台还是实体店,全渠道都能让品牌信息都能有所渗透...,Sitecore为用户提供一种积极、个性化、无缝用户体验,而这种无所不在数字互动,也更容易催生用户对于品牌好感。

48820

商业网站你这样优化

看着配置完全可以满足网站需求,但是巧事情发生了,网站一台服务器时候还不是很卡,但是增加了两台负载服务器,居然卡了。接下来就来分享怎么让他变快!(当然每个时间段都有抢购任务情况,这个单说) ?...首先从网站配置来说前面说了完全能够满足,但是网站很卡原因为什么呢?...(1)数据库表设计有问题 (2)数据库没有加索引(分析得出) 以上两点就导致了问题出现,并且导致数据库cpu飙升 (1解决方案以及排错方法)有一个关键表引擎myisam,每次有更新操作都会出现锁表情况...,这就导致了在首页用到这个表时候,首页打开很慢 分析方法: 登陆mysql服务端,执行show processlist; 查看所有连接 现象sql执行状态为:sending data,copying

53420

神奇工场拥抱物联网正确姿势

一边大小玩家纷纷涌入、媒体海量关注、众筹成绩好得一塌糊涂,你一说自己做智能家居都仿佛站在风口的人;一边却是出货量可能十分惨淡,一个智能产品能火个一个月就了不得了。...而另一面,在他看来,极客也不应该是智能家居客户,他们份额也不过5%,有钱大叔能极客概率太小,还是得把目光放在普通大众上。一句话放明白,陈旭东姿势拥抱有钱大叔,而且小白有钱大叔。...但是各大智能家居平台最大问题思维模式,考虑“我公司拥有什么资源”,“如何将这些资源输出同时给公司带来价值”,比如要获取数据、抢占入口、树立形象或者就是试一下而已。...软硬云通吃,联想这样拥抱智能家居姿势对? 互联网和硬件巨头都在拥抱这场智能家居大潮。...在GMIC上,陈旭东除了为神奇工场站台,也介绍了母公司联想战略。联想业务涵盖PC、手机、服务器和云服务四大板块,软硬云通吃硬件巨头,联想想要做产业链条大玩家。

70540

正确云问题?

有时,这会产生云原生解决方案,有时候会导致混合云,有时甚至物理本地基础架构。 在微软公司近期“混合云”报告中指出,几乎所有企业都部署了混合云,或者计划在一年内这样做。...但是更重要,雷德蒙德频道合作伙伴杰弗里·施瓦茨说,近一半公司表示他们还没有实施混合云策略,实际上已经有一个云。...有时候公共和私有云将仍然需要一起工作,但是它可能不会人们以前所想一样常见。 据Cirba公司首席技术官Andrew Hillier介绍,采用混合云成功关键适当治理。...不幸,治理通常是开发/测试过程中最后一个考虑环节,当混合部署真实成本和复杂性出现在现实世界生产环境中时,许多组织对此感到震惊。...真正起点与商业领袖,用户,合作伙伴和任何其他利益相关者合作找出组织目标,然后确定正确技术组合来快速高效地实现这些目标。 与任何旅程一样,可以在决定要去哪里之后,然后再确定旅行行程。HERO译

1.3K30

你确定你批量方法插入正确

开始今天分享,初级小伙伴在面试过程中,肯定会问到目前主流持久层框架使用相关技术问题,当然作为“IT小白”我,在面试求职者时候同样也会问关于Mybtatis使用、二级缓存等等相关问题。...,五万条数据使用程序一个个插入,和使用Mybatis将SQL进行拼接,使用批量插入SQL,只有三个字段实体,在耗时层面效率差距≈10.5倍,如果当实体类数据较为复杂,数据量更大情况下,这个差距会拉取更大...,单个插入,每次插入需要程序将SQL给到MySQL执行,期间交互5万次,而批量插入只需要交互一次,且使用程序循环过程中也会造成对内存浪费,所以当面试官再问到此次问题时候,请毫不犹豫选择使用Mybatis...反问 插入是否有限制 反问:Mybatis批量插入有限制?可以随便插入任意条数据?来验证一下当Mybatis什么时候会承受不住插入数据量,会报什么异常?...06.122 INFO 4101 --- [nio-8088-exec-1] com.yang.service.impl.UserServiceImpl : 所耗费时间3706 最终插入20万条数据使用

93150

原来Python这样连接远程主机,你会

paramiko库有两种连接主机方式, 一种使用用户名和密码; 一种使用秘钥连接。...当使用用户名密码连接时遇到一个异常如下: 当你连接对方主机有SSH秘钥时候,在使用用户名密码连接时候: ValueError: ('Invalid private key', [_OpenSSLErrorWithText...,OpenSSH其中一个开源实现,paramikoPython一个库,实现了SSHv2协议(底层使用cryptography)。...Paramiko中几个基础名词: Channel:一种类Socket,一种安全SSH传输通道; Transport:一种加密会话,使用时会同步创建了一个加密Tunnels(通道),这个Tunnels...Paramiko基本使用 1. SSHClient常用方法介绍 (1) connect():实现远程服务器连接与认证,对于该方法只有hostname必传参数。

1.7K40

你用JavaGUI做课程设计这样

其实,众所周知,很多软件不是用Java来写,所以大家对JavaGUI编程便不会那么重视,认为其能实现功能就好,那JavaGUI编程能不能把界面做得其他语言编写界面一样美观呢?...答案可以,这次小编就用JavaGUI模仿有道词典外观来做一次课程设计,把JavaGUI认认真真地熟悉一遍,而且不使用WindowBuilder插件。 ?...如果使用原来默认组件属性达不到这种效果,整个框架需要取消Frame以及弹出窗口Dialog原来边框显示,取消后也就没有了最小最大化按钮和退出按钮,需要自己添加上去,为了达到按钮和标题栏融为一体外观效果...这样就只需要直接用这些图标作为鼠标进入和离开按钮时背景即可达到有道词典最大最小化按钮显示效果,但取消边框后窗体不能被移动,这时候需要设置一些联动参数: ? ? ?...当然,群里也有实现了把内容保存到数据库文件——图书管理系统(有数据库),使用MySQL,自行下载后导入eclipse和数据库即可使用。 ?

1.3K80

最近面试遇到种种应聘者,你这样

,那以后这样事情还会多着呢。...嗯...这些概念性东西我忘了... 我:那你说一下什么Spring AOP,可以干什么用?使用什么技术实现?...(我问有什么好处,他刚没回答,我换个问法) 应聘者:你说为什么不用别的MQ?项目里用就是RabbitMQ我就用了 我:发邮件不用MQ也能实现,为什么要引入MQ呢?有什么好处?...应聘者:这个...我不太清楚,记不清了,上个项目用到了,好久没有用了,但是我如果有项目要使用的话,基本上再看看就能很快上手了。 我:哦,我看你技术写都是熟悉。那你Redis用?...应聘者:咱们公司在北京我看手机号北京(...等一些关于项目的几个问题) 这个应聘者存在一个什么问题?眼高手低,高估自己,面试准备不充分。

37820

这样在 C# 使用 LongRunningTask

但是可能在没有注意情况下,你就使用了错误用法。那么本文我们来简单阐述一下这个参数作用,和使用注意要点。...因为我们可能学习到了,Task 默认 Scheduler ThreadPool,而 ThreadPool 线程有限,如果你任务需要长时间运行,或者需要占用大量 CPU 资源,那么就会导致...于是我们很聪明就想到了,我们可以使用 TaskCreationOptions.LongRunning 参数来指定 Task,这样就可以避免线程饥饿。...正确写法 因此,实际上如果想要保持单独线程持续运行,我们需要移除异步方式,改为同步方式。...这样就可以避免 LongRunning Task 直接结束。 总结 本文我们简单阐述了 TaskCreationOptions.LongRunning 参数作用,和使用注意要点。

26510

这样在 C# 使用 LongRunnigTask

但是可能在没有注意情况下,你就使用了错误用法。那么本文我们来简单阐述一下这个参数作用,和使用注意要点。...因为我们可能学习到了,Task 默认 Scheduler ThreadPool,而 ThreadPool 线程有限,如果你任务需要长时间运行,或者需要占用大量 CPU 资源,那么就会导致...于是我们很聪明就想到了,我们可以使用 TaskCreationOptions.LongRunning 参数来指定 Task,这样就可以避免线程饥饿。...正确写法因此,实际上如果想要保持单独线程持续运行,我们需要移除异步方式,改为同步方式。...这样就可以避免 LongRunning Task 直接结束。总结本文我们简单阐述了 TaskCreationOptions.LongRunning 参数作用,和使用注意要点。

67140

在别人写代码上做修改我这样保证正确

就算有,不搞清楚以前逻辑和背景,就直接抛掉这些历史包袱不对。在修改别人写代码时候,我们需要信奉黑格尔名言:“存在即合理”。一定要弄清楚之前这样编写代码出于什么样考虑。...详细方案设计在别人写代码上做修改,做详细设计时,第一步要做充分评估改动影响;第二步画流程图梳理改动前后调用链和数据流,列出修改点;第三步定好测试关键案例,确保结果正确性。...结构化日志打印,整个工程用了前人写一个“轮子”,在jar包里不好改。改了怕影响太大。因为使用日志,日志涉及其他两个非常重要功能。这两个功能要借助日志分析,用户来进行自动操作。...我也不建议他这样保证。后来,我自己想了一下,如果用两个模板,两个append同时写一个日志文件,之前也没有这么用过,也有风险,所以还是按照他说改了。...其实本质上我同事意思就是:“我和你一起保证修改正确性”。用心是非常好。 最终提7条每条我们都争论了,那是因为每一条我们两个都真正思考过。这种氛围我觉得是非常好

1.1K20

高并发之——ThreadPoolExecutor类居然这样保证线程池正确运行...

问题 对于线程池核心类ThreadPoolExecutor来说,有哪些重要属性和内部类为线程池正确运行提供重要保障呢?...ctl相关属性 AtomicInteger类型常量ctl贯穿线程池整个生命周期重要属性,它是一个原子类对象,主要用来保存线程数量和线程池状态,我们看下与这个属性相关代码如下所示。...Worker内部类 Worker类从源代码上来看,实现了Runnable接口,说明其本质上一个用来执行任务线程,接下来,我们看下Worker类源代码,如下所示。...Worker类实现了Runnable接口,需要重写run方法,而Workerrun方法本质上调用ThreadPoolExecutor类runWorker方法,在runWorker方法中,会首先调用...} } 使用自定义拒绝策略创建线程池。

38220

双重检查锁,原来这样演变来,你了解

在看Nacos源代码时,发现多处都使用了“双重检查锁”机制,算是非常好实践案例。这篇文章就着案例来分析一下双重检查锁使用以及优势所在,目的就是让你代码格调更加高一个层次。...Nacos中双重检查锁 在NacosInstancesChangeNotifier类中,有这样一个方法: private final Map<String, ConcurrentHashSet<EventListener...我们知道使用锁会导致额外性能开销,对于上面的单例模式,只有第一次创建时需要锁(防止创建多个实例),但查询时不需要锁。 如果针对方法进行加锁,每次查询也要承担加锁性能损耗。...此时,你是否有一个疑问,为什么Nacos中双重检查锁没有使用volatile关键字呢? 答案很简单:上面单例模式如果出现指令重排,会导致单例实例被使用。...那么,再看Nacos代码,由于创建ConcurrentHashSet并不会影响到查询,而真正影响查询listenerMap.put方法,而ConcurrentHashSet本身线程安全

48220

腾讯游戏原来这样使用 Prometheus !(上)

背景 随着游戏业务不断增多,业务使用环境也越来越复杂。此时对于监控难度也是逐步增大,一方面监控数据量大;另一方面多云之间对于监控及时性解决方案。...我们将拆分成基础篇和实战篇两期文章,为您详细介绍腾讯游戏是如何使用 Prometheus 。期望能给您开发运维之路,带来一些启发~ 基础篇 标题:腾讯游戏原来这样使用 Prometheus !...Prometheus 预聚合、标签、变量、可视化等基础介绍; 实战篇 标题:腾讯游戏原来这样使用 Prometheus !(下) 内容大纲: 1. 腾讯游戏业务背景介绍; 2. ...当你 N 台主机向一台主机上报指标(主要是这 N 台主机不方便安装 Exporter 或者业务比较重要主机,怕影响其性能),推荐使用 Pushgateway 方式。...同时,host 命名,也是有规律。 巧用变量 多选我们经常有这样场景:有多个组或者集群,然后组或集群下有多个机器使用同一个模板,当然,这里组或集群可能有多级关系。

72320
领券