原来如此.................
2010-8-20 14:01:05 木栅
呵呵...这个我刚从CSDN看完..... 现在看看那个人家为什么选择J2EE的,..我也一直在纳闷这个问题!!
2010-8-20 13:37:08 木栅
数据库如何设置,会自动备份??
2009-12-14 21:20:22 李思
老师,请写一篇关于程序控制打印机打印的文章吧。
2009-12-14 21:18:40 李思
hao
2009-12-8 22:02:19 huangliuhong
2009-12-8 0:22:57 匿名用户
看到你的文章,美的让我心碎,你总是说,我也可以,也可以写出那么美的句子,可是,当我再一次看到你的文章,我流泪...
2009-12-3 10:41:21 李思
thanks
2009-12-3 9:13:47 李思
呵呵~~看了我懂得很多
2009-11-28 14:28:41 黄柳鸿
太谢谢你`~~
2009-11-28 14:27:56 匿名用户
1.多态性的概念
1.1.普通继承的缺陷——第6章内容把Teacher类和Student 类中的共性部分放在Person父类中,特殊部分放在子类中,子类继承父类。因为Teacher类和Student类的SayHi()问侯方法内容不同,所以,Person父类中没有SayHi()方法,Teacher类和Student类有不同实现的SayHi()方法。
为方便管理,把Teacher类和Student类的对象放在泛型集合中。根据继承的is-a关系,泛型集合约束的类型必须是Person父类才可以实现这个功能。
而在遍历泛型集合时,因为有些对象是Teacher类型,有些是Student类型,所以要进行类型检测和类型转换。
现在,有一个新问题:如果添加一个继承自Person父类的子类时,遍历泛型集合时,还要加上对这个新子类的类型检测和类型转换。
这是比较麻烦的,那么该如何解决这个问题呢?
1.2.巧妙的做法——多态方式给Person父类添加一个没有实现(即没有方法体)的抽象方法SayHi(),Teacher子类和Student子类override重写SayHi()方法。
则泛型集合中访问各个对象时,每个对象都有抽象的方法SayHi(),可以不要进行类型检测和转换,所以可以调用,因为父类的SayHi()没有方法体,所以,执行时,是执行对象所属类型的对应SayHi()方法,从而实现了Teacher对象调用Teacher类中的SayHi()方法,Student对象调用Student类中的SayHi()方法。
而添加一个继承自Person父类的子类时,只要该子类重写了SayHi()即可。泛型集合遍历的代码,不要作任何改变。
1.3.什么是多态?
多态是指不同类的对象,对同一个方法调用,可以产生不同的响应方式。
多态有两种形式:(1)重载:同一个类中方法的重载——方法名相同,参数个数或参数类型不同(2)重写:子类重写父类中的抽象方法,或子类重写父类中的虚方法(后面会讲到)
2.使用抽象类和抽象方法实现多态
2.1.抽象类和抽象方法的特点
(1)抽象方法抽象方法是没有具体实现(没有方法体)的方法;要加abstract关键字;
(2)抽象类抽象类是含有抽象方法的类;抽象类必须由其子类通过override来重写它的抽象方法,除非子类也是抽象类;
(3)抽象方法与抽象类的关系有抽象方法的类必须是抽象类,但抽象类中的方法不一定都是抽象方法;抽象类中也可以容纳有具体实现的方法;
2.2.抽象类的限制(1)抽象类不能被实例化;(2)抽象类不能是密封类,它必须可以被继承,以便被子类重写;(3)抽象类不能是静态类,因为它的方法没有具体的实现。
2.3.抽象类和抽象方法的使用抽象类中的抽象方法必须在子类被override重写。
2.4.抽象类的应用场合(1)实现多态性;(2)使用父类可以提供一些共性的行为;(3)约束子类必须拥有的行为;
2.5.里氏替换原则子类对象重写了父类对象的方法,故子类对象可以代替父类对象。即:子类对象可以赋给父类对象,子类对象和父类对象是is-a的关系。
is操作符,检查对象是否可以强制转换为相应类型,如果可以则为true,否则会引发异常;as操作符,将对象强制转换为相应类型,成功则OK,失败则不引发异常,并返回null。
3.使用虚方法实现多态
3.1.为什么需要使用虚方法
如果方法体有公共部分,则这个公共部分应该放在哪里呢?
A. 父类中是抽象方法,没有实现,所以不可以把公共部分放在父类中;B. 子类中是具体实现,把公共部分放在子类中,则每个子类都要有,代码冗余;C.父类中是具体方法,放公共部分,但子类可以重写吗?如果子类可以重写,则OK。
给父类的具体方法前加virtual关键字,则该具体方法在子类中就可以被重写了,这种方法称为虚方法。
3.2.虚方法的使用
(1)虚方法可以在子类中被重写,所以它也可以用来实现多态性
(2)虚方法在父类中的默认的实现,所以子类的实现如果跟父类一致,则子类可以不重写override该方法;不一致,则子类可以重写override该方法,大大提高了程序的灵活性。
(3)Equals()虚方法默认情况下Equals()虚方法是比较引用是否相等,我们可以重写它,让它比较值是否相等。
3.3.虚方法和抽象方法的区别
4.C#面向对象的三大特性
参考文章:C#面向对象三大特征
4.1.封装
保证对象自身数据的完整性和安全性。
(1)完整性
体现在:把属性和方法封装到类中好处有:模拟现实世界,实现代码重用,隐藏内部实现
(2)安全性
体现在:把字段封装成属性好处有:避免非法赋值,避免类内部变动引起其它模块的变动,降低耦合性
4.2.继承
实现对象之间的持久性关系。
(1)传递性
继承需要符合is a 的关系,继承允许多层继承;
(2)单根性
C#中明确规定,一个子类不能同时继承多个类,要实现多重继承,需要使用接口;注意:有些语言如C++允许多重继承,但多重继承会引起混乱,加大了OO的复杂性。
继承的好处有:模拟现实世界,实现代码重用,使用代码结构更清晰
4.3.多态
实现不同类的对象,对同一个方法调用,产生不同的响应方式。
5.简单工厂设计模式概述
5.1.什么是设计模式
模式是得到很好研究的范例;设计模式是软件开发中的经验积累,是特定问题经过实践检验的特定解决方法。
5.2.简单工厂模式
用于在调用者不知道对象属于哪个子类的情况下,创建不同的对象。
5.3.设计模式的意义
姓名: (游客) 记住我的信息?
主页:
发表评论:
请您将字数限制在 3000 以内
验证码: