超类设计中接口的使用

Matlab:定义接口超类 阅读详情

        这两天看了设计模式,有点了新理解。

     就拿书上的例子来说,若果要你设计一个“鸭子类”,你会怎么设计?

     我相信有人会是这样设计:

            1)叫的行为

            2)飞行的行为(比如野生鸭子就是会飞的)

            3)游泳的行为

 

 此时,你正处于中枪中。原因:不是所有的鸭子都会飞,例如玩具鸭子,叫的行为也不只是呱呱,还有吱吱叫等。

如何解决呢?

解决:因为叫的行为和飞的行为属于动态的,即:是变化的,那么索性就将其分离出来,做成一个接口,利用多态的想法针对不同的鸭子(子类),有不同的叫(或是不叫)

例如:

public duck{

           QuackInf    quack;//叫接口

            FlyInf         fly;//飞行接口

}

当子类继承duck时,将属性quack与fly赋予不同的实现(new 相应的impl),则可得到相应的行为结果,同时使得代码的复用性得到了充分的发挥。

 

1:有人会问:好处不明显啊?即他会说--我就做成一个quack类和fly类,不就行了么?干什么这么麻烦?

      回答:1)首先反问一个问题--当现在不只是呱呱叫和吱吱叫,又新增了一种新款鸭子的叫声例如记为A,你怎么办?

                  我想 你只有修改quack这个类了,同时增加if,与else的判定,当增加一个,你就在quack中增加一个else,你还需要有判断依据。这是一种不可取的方法。

                  2)针对这个问题,要是使用接口的情况,则简单了,你只需要增加一种相应(A)的实现,而调用者并不关心具体的实现,而是利用多态来实现,显的更为方便。

Delphi中使用FireDAC与uniDAC高效连接PostgreSQL的实战指南 本文为Delphi开发者提供了使用FireDAC与uniDAC组件高效连接PostgreSQL数据库的实战指南。文章详细对比了两款组件的选择策略,重点解析了驱动依赖(libpq.dll)的配置、连接参数设置、常见错误排查及性能优化技巧,旨在帮助开发者快速构建稳定可靠的数据库连接。 阅读详情

相关推荐

双层优化入门(2)—基于yalmip的双层优化求解(附matlab代码)

​上一篇博客介绍了双层优化的基本原理和使用KKT条件求解双层优化的方法,这篇博客将介绍使用yalmip的双层优化问题的求解方法。 1.KKT函数 通过调用yalmip工具箱中的KKT函数,可以直接求出优化问题的KKT条件,省去自己手动写的步骤。 2.solvebilevel函数 solvebilevel是yalmip工具箱内置的求解双层优化问题的函数。也就是通过这个函数,不需要咱手动写KKT条件,也不需要使用KKT函数,直接把上、下层优化的目标函数、约束条件往里面一放,就能求出结果。 ​

配电网和matlab的博客 1万+

接口、抽象类、超类(父类)与子类的Java代码示例。

假设我们有一个简单的场景:动物世界中不同种类的动物,它们有不同的行为(如移动和发声),并且某些动物是哺乳动物。

2403_88791226的博客 259

Skyworks SKY85331-11的Wi-Fi 6 (802.11ax)标准 2.4G 高功率WLAN前端模块解决方案

SKY85331-11是高度集成的2 GHz前端模块(FEM)包含2 GHz单刀双掷(SPDT)发送/接收(T / R)开关,2 GHz低噪声放大器(LNA)带旁路和一个2 GHz功率放大器(PA),用于大功率802.11ax应用程序和系统LNA和PA禁用功能可确保低漏电流 关闭模式。 包括一个集成的功率检测器以提供系统内的闭环功率控制。该设备提供Small (24-pin, 3 x 5 mm) (LGA)封装。 图1.引脚配置和封装如图所示 图2.信号引脚分配和功能引脚描述 图...

zhangbao19890622的博客 4504

定义一个接口,声明一个方法area()来计算圆的面积,再用一个具体的类来实现此接口,再编写一个测试类来使用该接口和子类

package lianxi; public interface jiekou { public static final double PI = 3.1415926; public double area(); } package lianxi; public class shixian implements jiekou { private double r; public s...

ZJC'博客 1万+

ETAP实战:如何用仿真软件快速绘制标准一次接线图(附模板下载)

本文提供了一套基于ETAP软件高效绘制标准一次接线图的完整实战工作流。从国标符号库配置、绘图模板创建,到核心设备绘制、参数标注,再到利用软件模型进行拓扑检查与短路电流校核,手把手教你实现从零到一的专业图纸设计。文末附有实用模板下载,助你大幅提升电力设计效率与图纸质量。

weixin_29291573的博客 510

通达信浮筹多空波段抓牛擒龙指标公式源码

VAR33:=VA3>=REF(VA4,1) AND C<REF(C,1) AND VAR19=60 AND VAR18=0 AND 活跃线>=REF(活跃线,1) AND VA12<REF(VA13,1);DRAWTEXT(VAR28 AND COUNT(VAR28,30)=1,65,' ★超涨注意风险'),COLOR0000FF;DRAWTEXT(VAR26 AND COUNT(VAR26,30)=1,90,' ←继续等'),COLOR00FFFF;浮筹线:VA3,COLORFF00FF;

2401_86043146的博客 5258

面向对象语言接口和超类

首先要知道什么是面向对象语言和超类还有接口面向对象语言面向对象语言,是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。语言中提供了类、继承等成分。超类被继承的类成为超类(父类)接口计算机系统中两个独立的部件进行信息交换的共享边界。这种交换可以发生在计算机软、硬件,外部设备或进行操作的人之间,也可以是它们的结合。可以理解为一个特殊的抽象类,

WSQPoison的博客 1339

【软件系统架构】系列四:嵌入式技术

嵌入式系统是以应用为中心、以计算机技术为基础,并将可配置与可裁剪的软硬件集成于一体的专用计算机系统。它需要满足功能、可靠性、成本、体积、功耗等方面的严格要求。 嵌入式系统一般由以下组成部分构成:

moton2017的博客 999

设计一个Shape接口和它的两个实现类Square和Circle

6、设计一个Shape接口和它的两个实现类Square和Circle 1)Shape接口中有一个抽象方法area(),方法接收有一个double类型的参数,返回一个double类型的结果 2)Square和Circle中实现了Shape接口的area()抽象方法,分别求正方形和圆形的面积并返回 在测试类中创建Square和Circle对象,计算边长为2的正方形面积和半径为3的圆形面积 in

:)一位靓仔偶然路过的博客 5万+

总目录- AutoSAR从入门到精通实战系列课程【持续更新中...】

欢迎大家订阅《AutoSAR入门和实战系列》,开始前博主先列出AutoSAR学习的大纲,同时这也可以作为大家学习AutoSAR的参考。想学习和及以及的同学们,可以订阅本博客,本博客一直持续更新中。如果想深入或从本质上学习和理解AutoSAR,打开此链接后,,点击左下方【立即订阅】订阅专栏!!!】......

4万+

1、VMware vSphere 全面指南:从入门到精通

本文全面介绍了VMware vSphere从入门到精通的完整知识体系,涵盖基础概念、环境适配、部署规划、安装配置、网络与存储准备、虚拟机创建与管理、资源组织、事件监控、巡检流程、主机配置文件管理、资源池优化、高可用性与容错应用,以及故障排除方法。结合实用工具和部署技巧,帮助读者系统掌握vSphere的核心功能与运维实践,提升虚拟化环境的稳定性与管理效率。

pz890123的博客 94

HeadFirst设计模式之“策略”——以动作冒险游戏为例

文章目录一、前言二、动作冒险游戏的实现UML图Weapon.javaCharacter.javaActionGame.java运行结果 一、前言 策略模式定义了算法族,分别封装起来,让他们之间可以相互替代,此模式让算法的变化独立于使用算法的客户。 在Head First设计模式第一章中,提出了”策略“这一设计模式,并以鸭子为例来讲解之。 针对不会飞的鸭子和不会呱呱叫的鸭子,提出了将行为和呱呱叫行为单独封装成一个接口。而将几乎固定不变的行为和属性封装在超类(虚基类)中,这其中体现了几个设计原则和设计思想。

SCUhzs 881

【Bug已解决】Codex 切换 model_provider 后历史会话消失的解决方案

方案适用场景推荐指数切回原 provider 验证排查的第一步,确认数据是否真的丢失⭐⭐⭐⭐⭐查看本地会话文件进一步确认数据完整性⭐⭐⭐⭐⭐查阅跨 provider 恢复命令官方是否提供了对应功能⭐⭐⭐使用社区辅助工具需要频繁切换 provider 的场景⭐⭐⭐定期备份配置目录任何场景下的通用保险措施⭐⭐⭐⭐切换后历史会话"消失"的本质是客户端的会话列表展示逻辑受当前活跃 provider 状态过滤,而不是原始数据文件被真正删除。

一键难忘的博客 5999

Effective Java 【类和接口】第18条 复合优先于继承

目录前言如何解决问题什么是复合总结 前言 在包的内部使用继承是非常安全的,在那里子类和超类的实现都处在同一个程序员的控制之下。对于专门为了继承而设计并且具有很好的文档说明的类来说(详见第19条),使用继承也是非常安全的。 然而,对普通的具体类进行跨越包边界的继承,则是非常危险的。 其原因主要是因为: 与方法调用不同的是,继承打破了封装性。子类依赖于其超类中特定功能的实现细节。如果超类中的实现改变,就有可能给子类的逻辑带来很大的危害。因而,子类必须要跟着其超类的更新而演变,除非超类是专门为了扩展而设计的,并且

zhangxiaoxiao9527的博客 212

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

重构手法67:Replace Inheritance with Delegation (以委托取代继承)

某个子类只使用超类接口中的一部分,或是根本不需要继承而来的数据。在子类中新建一个字段用以保存超类;调整子类函数,令它改而委托超类;然后去掉2者之间的继承关系。 动机:继承是个好东西,但有时候它并不是你要的。你常常会遇到这样的情况:一开始继承了一个类,随后发现超类中的许多操作并不真正适用于子类。这种情况下,你所拥有的接口并未真正反映出子类的功能。或者,你可能发现你从超类中继承了一大堆子类...

aipaizi0273的博客 252

SAP B1中文培訓教材_SDK

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

《Head First设计模式》之策略模式

 现在如果我们要让鸭子会飞,那么只需要在超类上添加方法即可:这时候就出现了一个bug!  如果子类是塑料鸭或者残疾的鸭子,那岂不是也到处乱飞!!!这是个严重的问题。所以在这时候又想到了用“继承”来解决 。继承又会导致,如果出现诱饵鸭、橡皮鸭。总不能每次都去覆盖父类的方法吧。拓展性极差。所以决定改用接口来解决此问题,将fly和quack两个行为从父类抽离出来,放到接口中,这样让会飞会叫的鸭子去实现该...

.... 永远年轻,永远热泪盈眶 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

08-接口

潜艇入场:潜艇是由窗口产生的,所以在窗口World类中设计nextSubmarine()生成潜艇对象潜艇入场为定时发生的,所以在run中调用submarineEnterAction()实现潜艇入场 在submarineEnterAction()中: 每400毫秒,获取潜艇对象obj,submarines扩容,将obj添加到submarines最后一个元素上水雷入场:-------------今天只做一部分(剩下部分周五做)海洋对象移动(不包括战舰):深水炸弹入场:战舰移动:删除越界的对象(潜艇、水雷、深水炸

qq_54781283的博客 121

Effective Java笔记第三章类和接口第四节复合优先于继承

Effective Java笔记第三章类和接口 第四节复合优先于继承 1.继承是实现代码重用的有力手段,但是并非永远是完成这项工作的最佳工具。使用不当会导致软件变得很脆弱。在包的内部使用继承是非常安全的,在那里,子类和超类的实现都处于同一个程序员的控制之下。对于专门为了继承而设计,并且具有很好的文档说明的类来说,使用继承也是非常安全的。然而,对于普通的具体类进行跨越包边界的继承,则是非常危险的。本文的继承只实现继承(当一个类扩展另一个类时),并不适用于接口继承(当一个类实现一个接口时)。 2.与方法调用不同

zh123456_789的博客 194

Java 接口

什么是接口: 形态描述: 比抽象类还“抽象”的类型 抽象方法,只有对功能描述,而没有功能的具体实现 包含有抽象方法的类,我们使用的抽象类来描述 接口是,更加“抽象”的“抽象类”!里面居然没有一个“具体的物件” 【抽象类中有具体实现的方法,接口没有】 语法特征: 只包含有抽象方法的数据类型(里面的所有方法都是抽象方法) 接口使用的意义: 1.【类的继承具有“单根性”】 ——一个类只能有一个“父类”,但允许实现“多个接口” 2.它是“多态”特性的更加灵活的实现(不在拘泥于“父子继承关系”) 3.接口在定义时,不

DTCloud 1087

JAVA类中 void_有人可以在Java中解释void返回类型吗?

Can someone explain a void return type in Java?void类型用于声明方法不返回值.Couldn’t you just make the return type String and set the string equal to the parameter to make it show up when the method is called?假设“...

weixin_42114046的博客 289

【第17条】接口只是被用于定义类型

    当一个类实现了一个接口的时候,这个接口被用做一个类型(type),通过此类型可以引用这个类的实例。除此之外,其他目的而定义接口是不合适的。       也就是形如: Interface objct = new Class(); //的形式       例:  List list1 = new ArrayList();  //List是接口,ArrayList是一个实现类    ...

从Java看编程 259

《重构,改善既有代码的设计》以委托取代继承还是以继承取代委托

什么时候该使用以委托取代继承?什么时候又该以继承取代委托? 先来看看两者各自分别适用于的场景: 以委托取代继承:某个子类只使用超类接口中的一部分,或是根本不需要继承而来的数据。 注:你只需要受委托的一部分功能,接口中的哪一部分应该被使用,哪一部分应该被忽略,完全由你控制,这样做的成本是需要额外写出委托函数,但这些函数都非常简单,极少可能出错。 以继承取代委托:如果两个类之...

努力让自己更优秀的博客 464

Python面向对象类编写细节分析【类,方法,继承,超类,接口等】

这篇文章主要介绍了Python面向对象类编写细节,较为详细的分析了Python面向对象程序设计中类,方法,继承,超类,接口等相关概念、使用技巧与注意事项,需要的朋友可以参考下 本文实例讲述了Python面向对象类编写技术细节。分享给大家供大家参考,具体如下: 类代码编写细节 继续学习类、方法和继承。 class语句 以下是class语句的一般形式: class <name>(super...

python多线程基础教程进阶教程 814

Matlab中定义接口超类

定义接口超类 接口 类定义的属性和方法构成接口,该接口决定类用户如何与类的对象交互。创建一组相关类时,接口定义所有这些类的公共接口。接口的实际实现可能因类而异。 以一组设计用于表示各种图形类型的类为例。所有类都必须实现Data属性,以包含用于生成图形的数据。然而,对于不同类型的图形,数据的形式可能有很大不同。每个类可以通过不同方式实现Data属性。 对于方法,也存在同样的差异。所有类都可以有一个创建图形的draw方法,但是,该方法的实现会根据图形的类型而变化。 接口类的基本思想是...

jk_101的博客 1094

类、超类和子类

继承中的类、超类和子类

Corleone1024的博客 1350

java超类_java超类

this是java使用的一个特定意义的引用,它指向当前对象自身。(指向该关键词所在的类,,用来引用自己所在的类中的成员变量或方法。)super关键词指向该关键词所在类的父类,用来引用父类中的成员变量或方法。通过 super.someMethod([paramlist])将调用父类中的 someMethod()方法。该方法不一定是在当前类的直接父类中定义的,可以是直接父类在类的层次体系中继承而来。S...

weixin_34418334的博客 2973
上一篇: [Oracle]分割字符串返回数组
下一篇: oracle nvl函数的使用与参数可以是sql语句使用说明
kejiaming
博客等级 码龄15年 19粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值