ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:18.67KB ,
资源ID:26353374      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26353374.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(封装继承多态通俗理解.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

封装继承多态通俗理解.docx

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.一个类里面有另一个类 . 继承,类与类之间的关系是 is a

5、.多态 (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 = strSiteName;URL

6、 = 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 : Contactpublic new string UpdateNotify()return This is to let

7、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);public new string UpdateNotify()return This is to let you know

8、 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, Fancy Financial Site);Contact Contacts = new Contact2;Contacts0 = new SiteOwner(Pierre Doe, leFin);Contacts1 = new Cust

9、omer();foreach (Contact poc in Contacts) if (poc is SiteOwner)Console.WriteLine(Message: 0n, (SiteOwner)poc).UpdateNotify();elseConsole.WriteLine(Message: 0n, (Customer)poc).UpdateNotify();在例子中 ,Contact 类有个虚拟方法 ,有两个派生类分别实现 .使用了 new 关键字 . 可以有更有效和优雅的方法 ,实现它 ,就是多态 .例子:using System; abstract public clas

10、s Contact public virtual string UpdateNotify()return Web Site Change Notification;public class Customer : 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;pu

11、blic 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 Times.; public class Testpublic static void Main()Contact Contacts = new Contact2;Contacts0 = new SiteOwner(Le Financie

12、r);Contacts1 = new Customer();foreach (Contact poc in Contacts)Console.WriteLine(Message: 0n, poc.UpdateNotify();例子中 , 派生类用 override 实现了多态 .虚拟方法是允许多态工作的基类的方法 .用override 修饰符说明 ,能被派生类重载 .虚拟方法和抽象方法的 不同时, 虚拟方法有实现 , 抽象方法没有 .抽象方法 ,隐式说明是虚拟 ,必须被重载 ;虚拟方法不必被重载 .多态 ,必须是虚拟方法 ,而且 ,方法的签名必须一致 ,包括方法名称 ,参数 ,和参数类型 .

13、例子:abstract 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 和 overrid

14、e 修饰符 ,都可以实现新的方法 .但 ,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,has been updated

15、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 Times.;public class Testpublic static void Main()Conta

16、ct 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 site, Le Financier, has been added as a link to Financial Times.Message: Web Site

17、Change Notification例子中 ,Customer 用new 实现新的方法 ,但是 ,在运行是不是多态 .仍然调用基类的方法Most-Derived Implementations( 多重派生实现 )Polymorphic Properties( 多态的属性 ):C# 允许 ,属性的多态实现 . 例子: using System;public class SiteStatspublic int numberOfVisits = 0;abstract public class Contactprotected string name;public virtual string Na

18、megetreturn name;setname = value;public class Customer : ContactSiteStats myStats = new SiteStats();public override string NamegetmyStats.numberOfVisits+;Console.WriteLine(Number of visits: 0, myStats.numberOfVisits);return name;setbase.Name = value;myStats.numberOfVisits = 0;Console.WriteLine(Name:

19、 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 So

20、rtedList();public int NextIndexget return sites.Count;public virtual string thisint indexgetreturn (string) sites.GetByIndex(index);setsitesindex = value;public class FinancialSiteList : SiteListpublic override string thisint indexgetConsole.WriteLine(FinancialSiteList Indexer Get); if (index sites.

21、Count)return (string)null;return baseindex;setConsole.WriteLine(FinancialSiteList Indexer Set); baseindex = value;class SiteManagerSiteList sites = new SiteList();public static void Main()SiteManager mgr = new SiteManager();mgr.sites = new FinancialSiteList();mgr.sitesmgr.sites.NextIndex = Great Site!;Console.WriteLine(Site: 0,mgr.sites0.ToString();例子中 ,基类的索引器是 virtual, 派生类重载了索引器

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1