版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、封装的概念好比一辆汽车,你学开车的时候只需学会诸如踩油门、刹车,转方向盘即可,无需去了解它的 发动机是如何发动。继承,先说说我对类的理解,类起到的作用有:分类(你所用某个类创建的对象实际上该类的个案)和模 板的作用,那么继承则起到了对类再次分类的作用,比如,有个类 “动物”,“哺乳动物 ”继承“动物 ”,再往下 “马 ”又继承了 “哺乳动物 ”这个类。在这里,我们从下往上讲,首先,我们把某种东西划分出来,叫做“马”(当然还有 “牛”,“鱼”等等),接着,我们发现, “马 ”,“羊”等还有很多共同的特点,于是,我们再次划分 出了 “哺乳动物 ”这个类,再次分类,我们则有了 “动物 ”。但在实际开
2、发中,我们一般是从上往下定义的,即 先有了“动物”,再有“哺乳动物 ”,最后有 “马”。多态,正如上面朋友所说一重写,二重载。用汉字来打个比方,比如 “开 ”这个字,在不同的时候各有的意 思,比如“开门”,“开窗”,甚至有 “开车”,“开饭”等,具有相同名称但操作不同。具体的实现我就不累述了。说说接口吧,在 JAVA 不支持多继承的,实际上接口起到了类似多继承的作用,一个类只能继承另一个类 (或抽象类)但可以实现多个接口。打个比方, “张三 ”,他是一个 “人”,因此他继承了 “人”;与此同时,他 是一个 “司机”,他的平时行为还有 “开车 ”,很显然,这并不能从 “人”这个类里继承下来。怎么
3、办? JAVA 里 只支持单继承,这个时候,接口就起到了作用,它定义了 “司机 ”这个接口, “张三”实现了它,因此,他会开 车了。2 :封装:就象一个盒子,你不需要知道里面有什么东西,只知道它有那些用处就行 继承:就象父子关系,儿子是父亲的继承多态:好比一个父亲有多个儿子,各个儿子有不同的特征3:封装 (Encapsulation): 封装是一个面向对象的概念 ,对外部世界 ,隐藏类的内部 .封装优点 :1. 好的封装能减少耦合 .2. 类的内部的实现可以自由改变 .3. 一个类有更清楚的接口 .Data Hiding( 数据隐藏 ):封装的一个最有用的形式是数据隐藏 .一个类的数据表现一个
4、对象的状态 . 修饰符支持封装 :Private: 只有类本身能存取 .Protected: 类和派生类可以存取 .Internal: 只有同一个项目中的类可以存取 .Protected Internal: 是 Protected 和 Internal 的结合 .Public: 完全存取 .other Encapsulating Strategy:( 其他封装策略 ) 属性和索引器的目的是封装一个类的细节和给类的用户提供 一个公共的接口 .封装和继承的关系 :封装的意思是包容 (聚合),类与类之间的关系是 "has a".一个类里面有另一个类 . 继承,类与类之间的关系是
5、"is a".多态 (Polymorphism): 就是怎样重载一个虚拟类 .多态是面向对象的重要概念 .Implementing Polymorphism( 实现多态 ):例子:using System;public class WebSitepublic string SiteName;public string URL;public string Description;public WebSite()public WebSite( string strSiteName, string strURL, string strDescription )SiteName =
6、 strSiteName;URL = strURL;Description = strDescription;public override string ToString()return SiteName + ", " +URL + ", " +Description;abstract public class Contactpublic virtual string UpdateNotify()return "Web Site Change Notification"public class Customer : Contactp
7、ublic new string UpdateNotify()return "This is to let you know your favorite site, Financial Times, has been updated with new links"public class SiteOwner : ContactWebSite mySite;public SiteOwner(string aName, WebSite aSite) mySite = new WebSite(aSite.SiteName, aSite.URL, aSite.Description
8、);public new string UpdateNotify()return "This is to let you know your site, " + "n" + mySite.SiteName + ", has been added as a link to Financial Times."public class Testpublic static void Main()WebSite leFin = new WebSite("Le Financier","http:/www.LeF&qu
9、ot;, "Fancy Financial Site");Contact Contacts = new Contact2;Contacts0 = new SiteOwner("Pierre Doe", leFin);Contacts1 = new Customer();foreach (Contact poc in Contacts) if (poc is SiteOwner)Console.WriteLine("Message: 0n", (SiteOwner)poc).UpdateNotify();elseConsole.Writ
10、eLine("Message: 0n", (Customer)poc).UpdateNotify();在例子中 ,Contact 类有个虚拟方法 ,有两个派生类分别实现 .使用了 "new" 关键字 . 可以有更有效和优雅的方法 ,实现它 ,就是多态 .例子:using System; abstract public class Contact public virtual string UpdateNotify()return "Web Site Change Notification"public class Customer :
11、 Contactpublic override string UpdateNotify()return "This is to let you know your favorite site, Financial Times, has been updated with new links"public class SiteOwner : Contactstring siteName;public SiteOwner(string sName)siteName = sName;public override string UpdateNotify()return "
12、;This is to let you know your site, " + "n" + siteName + ", has been added as a link to Financial Times." public class Testpublic static void Main()Contact Contacts = new Contact2;Contacts0 = new SiteOwner("Le Financier");Contacts1 = new Customer();foreach (Contact
13、 poc in Contacts)Console.WriteLine("Message: 0n", poc.UpdateNotify();例子中 , 派生类用 "override" 实现了多态 .虚拟方法是允许多态工作的基类的方法 .用"override" 修饰符说明 ,能被派生类重载 .虚拟方法和抽象方法的 不同时, 虚拟方法有实现 , 抽象方法没有 .抽象方法 ,隐式说明是虚拟 ,必须被重载 ;虚拟方法不必被重载 .多态 ,必须是虚拟方法 ,而且 ,方法的签名必须一致 ,包括方法名称 ,参数 ,和参数类型 . 例子:abstrac
14、t public class Contactpublic virtual string UpdateNotify()return "Web Site Change Notification"public class Customer : Contactpublic override string SendMail() / errorpublic override string UpdateNotify(int number) / error例子中 ,SendMail 不是虚拟方法 ,故错误 ;UpdateNotify, 带有不同的参数 ,故也错误 .new 和 overri
15、de 修饰符 ,都可以实现新的方法 .但 ,new 实现的是派生类新的方法 例子:using System;abstract public class Contactpublic virtual string UpdateNotify()return "Web Site Change Notification"public class Customer : Contactpublic new string UpdateNotify()return "This is to let you know yourfavorite site, Financial Times
16、,has been updated with new links"public class SiteOwner : Contactstring siteName;public SiteOwner(string sName)siteName = sName;public override string UpdateNotify()return "This is to let you know your site, " + "n" + siteName + ", has been added as a link to Financial
17、Times."public class Testpublic static void Main()Contact Contacts = new Contact2;Contacts0 = new SiteOwner("Le Financier");Contacts1 = new Customer();foreach (Contact poc in Contacts)Console.WriteLine("Message: 0n", poc.UpdateNotify();结果是:Message:This is to let you know your
18、 site, Le Financier, has been added as a link to Financial Times.Message: Web Site Change Notification例子中 ,Customer 用"new" 实现新的方法 ,但是 ,在运行是不是多态 .仍然调用基类的方法Most-Derived Implementations( 多重派生实现 )Polymorphic Properties( 多态的属性 ):C# 允许 ,属性的多态实现 . 例子: using System;public class SiteStatspublic int
19、 numberOfVisits = 0;abstract public class Contactprotected string name;public virtual string Namegetreturn name;setname = value;public class Customer : ContactSiteStats myStats = new SiteStats();public override string NamegetmyStats.numberOfVisits+;Console.WriteLine("Number of visits: 0",
20、myStats.numberOfVisits);return name;setbase.Name = value;myStats.numberOfVisits = 0;Console.WriteLine("Name: 0", Name);public class Testpublic static void Main()Contact myContact = new Customer(); myContact.Name = "George"例子中 ,抽象类,有属性 Name, 派生类重载实现了属性Polymorphic Indexers( 多态的索引器 ): 索引器的多态 例子:using System;using System.Collections;public class SiteListprotected SortedList sites;public SiteList()sites = new SortedList();public int NextIndexget return sites.Count;public
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护士中医项痹病题库及答案
- 2025 八年级道德与法治下册法治游戏设计教育目标课件
- 浙江省绍兴市嵊州市三界片2025-2026学年八年级上学期11月期中考试语文试题(含答案)
- 2026年税务筹划培训合同(增值税)
- 2026年内蒙古锡林郭勒盟单招职业适应性考试题库完整参考答案详解
- 2026年克拉玛依职业技术学院单招职业倾向性考试题库及答案详解(新)
- 2026年内蒙古能源职业学院单招综合素质考试题库带答案详解(突破训练)
- 2026年南昌工学院单招职业适应性测试题库完整参考答案详解
- 2026年南充科技职业学院单招职业倾向性测试题库附答案详解(精练)
- 2026年兰考三农职业学院单招职业技能测试题库附参考答案详解(研优卷)
- 2026年金融科技支付创新报告及全球市场应用分析报告
- 2025年普通高中学业水平选择性考试地理河北卷
- 2025至2030心理咨询行业市场发展分析与发展前景及有效策略与实施路径评估报告
- 中国临床肿瘤学会(csco)小细胞肺癌诊疗指南2025
- 初中英语单词表2182个(带音标)
- 2025年专升本化学专业无机化学真题试卷(含答案)
- 医患沟通学课件
- 监理百日攻坚阶段工作总结分享
- 大一英语期末考试题及答案
- 钢结构施工方案模板及范例
- 2025至2030中国闪烁体行业调研及市场前景预测评估报告
评论
0/150
提交评论