由猫捉老鼠想起的——关于继承、接口和引用

用C#写了几年的网站,虽然感觉上没什么问题了,但是对于基础知识一直都是模模糊糊的,最近几天重新学习了一下基础知识,感受颇深。对于类、封装、继承、多态、接口等有了新的认识。

我想说说我的想法,请大家看看对不对。用猫捉老鼠来举个例子吧。

语言:C#

先来看看猫,猫有爪子、牙齿、胡须等等,这些都是天生的,也可以说是继承基类得到的。(继承)

再来看看猫捉老鼠的本领,(接口)
1、不只是猫能捉老鼠,蛇、猫头鹰等其他动物也可以捉老鼠。
2、猫捉老鼠的功能不是与生俱来的,而是后天学习的,如果不学习的话,那么猫就失去了捉老鼠的能力,学习不好的话也很难捉到老鼠。

说了这么多是想说明,捉老鼠的功能可以看作是一个接口,各种动物都可以继承(当然也可以不继承),光继承了还不行,还得去实现。自己去实现,那么就有不同的形式,也就有好有坏。

最后看看人是怎么对付老鼠的。(引用)

人呢也可以继承捉老鼠的接口,拿着板砖拍老鼠。但是人是很懒惰的同时也是很聪明的,于是人发明了老鼠药、老鼠夹,也可以买一只会捉老鼠的猫来。

那么这时 老鼠药、老鼠夹,会捉老鼠的猫 就是引用,引用一个现成的类来完成捉老鼠的功能。

我觉得接口有两个主要的功能 —— 规范命名和方便调用

比如可以写一个捉老鼠的接口,不管是什么只要有捉老鼠的功能那么久的继承捉老鼠的接口,然后去实现这个功能,功能(函数)的名称是相同的。

那么在调用捉老鼠的功能(函数)的时候,可以直接使用这个接口,而不用管具体是什么动物实现了捉老鼠的功能。

如果说接口实现了多继承,我觉得有点不大对劲。其实类完全可以直接实现多继承,C++就可以的。不知道是什么原因C#里面就给去掉了,弄个接口来代替。但是接口是“只定义不实现”的,是不是有点郁闷呢。

什么?您说猫捉老鼠和蛇捉老鼠是不一样的,这也对,但是我们可以用重写来实现呀。

其实有的时候使用“引用”的方式可以更好的解决问题。

当然我并不是说接口不好,也不是说不应该使用接口。只是想说不要太死板,灵活一点,该用什么就用什么。

还是那句话说得好:不管是黑猫白猫捉到耗子就是好猫!

PS:瞎说了几句,如有错误请大家多多帮助。知道这里高手很多,请各位高手多多指教!多多感谢!

这里的帖子对我也有很大的帮助。在此表示感谢!

时间: 2024-09-21 02:45:04

由猫捉老鼠想起的——关于继承、接口和引用的相关文章

寓教于乐 猫捉老鼠Flash小游戏自己做

在学习过程中,学习内容如果可以与适当的游戏相结合,必然可以提高大家生的学习兴趣,从而达到事半功倍的效果.为了说明方便,让我们以最常用的汉语拼音为例,在这里制作一个针对于汉语拼音的游戏,在轻松的气氛下,加深对汉语拼音的记忆.无论是家长还是孩子或者是学习汉语的外国友人都可以在游戏中学习到知识,玩一回"猫鼠游戏".   程序脚本: 我们确定要做一个猫捉老鼠的游戏,小猫和老鼠分别在屏幕的两端,每当答对一个问题,小猫就前进一步,当答对最后一个问题的时候,小猫到达老鼠的小屋,表示捉到老鼠了,这时候

CIO实战:猫捉老鼠做好信息安全管理

近几年,因为员工泄露信息,企业与员工对博公堂的事件屡见不鲜.但是,就算企业最后在官司上取得胜利,但是,也不能够挽回由此造成的巨大损失.随着企业竞争的日益白热化,企业信息价值日益显现,如何保障企业内部信息的安全,这在CIO工作中所扮演的角色,已经越来越重要. 俗话说,家贼难防.笔者认为,对于企业来说,信息安全管理的重点是如何防止企业内部员工泄露信息.这就好象是一个猫捉老鼠的游戏.CIO要在不影响正常工作的前期下,做好信息的安全http://www.aliyun.com/zixun/aggregat

猫捉老鼠游戏升级:利用匿名网络的下一代僵尸

摘要: 什么是僵尸网络(Botnet)?僵尸网络就是在互联网上相互 对话的计算机程序.很多僵尸网络都是恶意的,往往会进行发送垃圾邮件.发动DDoS攻击这样的事情. 遏制恶意僵尸网络泛滥是 什么是僵尸网络(Botnet)?僵尸网络就是在互联网上相互对话的计算机程序.很多僵尸网络都是恶意的,往往会进行发送垃圾邮件.发动DDoS攻击这样的事情. 遏制恶意僵尸网络泛滥是一场全球性的运动.第一代僵尸网络往往是由Web上面的单台计算机控制的,因此只需找到控制主机并将其干掉即可.如果僵尸程序里面包含有与控制主

央视春晚大玩猫捉老鼠

昨天上午11点,http://www.aliyun.com/zixun/aggregation/36193.html">央视蛇年春晚官方微博发布了完整节目单,与新报之前公布的节目单完全相同,共40个节目,郭德纲被排在第30位出场,而之前一直盛传将在最后一刻登上春晚舞台的魔术师傅琰东,也因道具太过沉重而憾别春晚舞台. 今晚18:00,央视春晚将进行最后一场带妆彩排.此前从未亮相彩排现场的S.H.E和雅尼,昨晚"空降"央视一号演播大厅,为演出作准备. 傅琰东魔术道具过重憾别

我和骗子玩了一回猫捉老鼠

不但不受骗,还要玩儿骗子今年的八月份,有个湖南的骗子冒充湖南教育局委派的采购科长给我来了个电话.说是要采购80000套的学生床上用品供全湖南省的新生入学用,开始我们都很认真地核算报价,并按他的要求寄出了样品.当时因为样品是交给办公室人员去联系和寄出,所以,也没有留意详细的收件地址,所谓的"王科长"收到样品后,来了电话,说很满意,很有希望可以和我们谈成这笔买卖,但是一问到交货期只剩下不足20天了,我心里就有点疑问了,毕竟这么大的单子,光是织布,印染都不只用20天!学校都要开学了,教育局怎

面试题目:猫吃老鼠问题的求解

前几天去上海某外企参加笔试,由于考试较紧,其中有些大题根本没办法完成,很是郁闷.现在偶们打算在这篇文章中探讨其中一道笔试题---猫吃老鼠问题的求解.写这篇文章只是想和大家交流学习,难免会有错误和不足,希望得到大家的批评,在此偶们不胜感激! 一.问题描述 现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号. 二.问题求解 我们假设老鼠按顺时针方向编号,猫从第一号老鼠开始吃.比如现有4个老鼠围成一个圆,

不要重复发明轮子:C++重用的5重境界(4)——继承接口DLL

第四重境界:继承接口DLL 看起来"代理接口DLL"已经能够很好的完成任务了,但追求完美的你是否总觉得有的地方不够优美呢? 关键就在于这部分: InterfaceClass:: Function1(int param1, char param2 ){     return m_pRealizeClass-> Function1(param1, param2 ); } 以上这段代码是代理模式的一种实现方法,但也有它的不足之处:对于RealizeClass的函数,InterfaceC

【C/C++学院】(10)重载与重写/多态的深入/多继承接口

1. 重写 PK 重载理解  1.1 函数重载 必须在同一个类中进行 子类无法重载父类的函数,父类同名函数将被名称覆盖 重载是在编译期间根据参数类型和个数决定函数调用 1.2 函数重写 必须发生于父类与子类之间 并且父类与子类中的函数必须有完全相同的原型 使用virtual声明之后能够产生多态(如果不使用virtual,那叫重定义) 多态是在运行期间根据具体对象的类型决定函数调用 #include <cstdlib> #include <iostream> using namesp

android 回调-Android如何通过继承接口的方式实现回调

问题描述 Android如何通过继承接口的方式实现回调 Android如何通过继承接口的方式实现回调 Android如何通过继承接口的方式实现回调 Android如何通过继承接口的方式实现回调 解决方案 实现接口回调Android 中的接口回调android 接口回调 解决方案二: 被调用者定义一个接口. 调用者实现接口,把回调函数代码写在这个实现类特定的方法中.把这个类的实例作为参数传给被调用者 被调用者调用这个对象的方法,实现回调 解决方案三: 不知道单独定义一个接口interface 然后