c# 类的继承与多态

上传人:第*** 文档编号:49575416 上传时间:2018-07-31 格式:PPT 页数:13 大小:176KB
返回 下载 相关 举报
c# 类的继承与多态_第1页
第1页 / 共13页
c# 类的继承与多态_第2页
第2页 / 共13页
c# 类的继承与多态_第3页
第3页 / 共13页
c# 类的继承与多态_第4页
第4页 / 共13页
c# 类的继承与多态_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《c# 类的继承与多态》由会员分享,可在线阅读,更多相关《c# 类的继承与多态(13页珍藏版)》请在金锄头文库上搜索。

1、C# 类的继承与多态张蓓1基类和扩充类 如果在类定义中没有指定基类,则C#编译器就将 System.Object作为基类。 class Myclass/不指定基类,则默认继承自System.Object/程序代码 实际上,任何类最初都是从System.Object类继承来的。2基类和扩充类访问修饰符class 扩充类名称:基类名称 /程序代码 例如: public class Apublic A() public class B :Apublic B() 访问B对象时,可以使用强制转换操 作将其转换为A对象。 A b = new B(); 强制转换不会改变B对象,但B对象 将被限制为A的数据和

2、行为,而无法 再访问B对象中的数据和行为。 将B强制转换为A后,可以将A重新强 制转换为B。但,并非A的所有实例 在任何情况下都可强制转换为B,而 是只有实际上是B的实例的那些实例 才可以强制转换为B。3例题1: public class Animalpublic Animal()Console.WriteLine(“基类构造函数:Hello,Animal!“);public void Eat()Console.WriteLine(“扩充类方法:Eating“);public class Cat : Animalpublic Cat()Console.WriteLine(“扩充类构造函数:He

3、llo,Cat!“);public void Walk()Console.WriteLine(“基类方法:Walk“);4基类和扩充类class Programstatic void Main(string args)Cat cat = new Cat();cat.Eat();Console.ReadLine(); 类Cat继承自类Animal,当创建Cat的实例时,会首先调用 基类的构造函数,然后调用扩充类的构造函数。5多态性 定义:同一操作作用于不同的类的实例,不同的类将进行 不同的解释,做好产生不同的执行结果。 1、虚拟(virtual)和重写(override) public virt

4、ual void myMethod()/扩充类可以重写此方法/实现代码public override void myMethod()/实现代码6例题2:     class Shapepublic virtual void ShowShape()Console .WriteLine (“图形!“);class Triangle : Shapepublic override void ShowShape()base.ShowShape();Console.WriteLine(“三角形!“); 7class Programstatic void Main(string args

5、)Triangle me = new Triangle();me.ShowShape();Console.ReadKey();         只有在扩充类中使用override修饰符时,才能重写基类声 明为virtual的方法;否则,在继承的类中声明一个与基类 方法同名的方法会隐藏基类的方法。8多态性2、new 用于隐藏基类的方法和属性。 例题3 当要求开发人员A重新设计基类中的某个方法,该基类是 一年前由另一组开发人员设计的,并且已经交给用户使用 ,可原来的开发人员没有再该方法前加virtual关键字,但 又不允许修改原来的程序,这时就不能使用ove

6、rride,需 要用new来书写。9多态性3、在扩充类中直接调用基类的方法 class MyBaseClasspublic virtual int MyMethod()return 5;class MyDerivedClass:MyBaseClasspublic override  int MyMethod()return base .MyMethod ()*4;10抽象类 使用abstract修饰符,用于表示类中的成员不一定全部实现 ,即可以只有声明而没有实现。只能用于基类。 抽象类和非抽象类的不同:抽象类不能直接被实例化,只能在扩充类中通过继承使 用,对抽象类使用new运算符会产

7、生编译错误。抽象类可以包含抽象成员(有abstract修饰符的成员) ,而非抽象类不能包含抽象成员。 当从抽象类派生非抽象类时,非抽象类必须实现抽象类的 所有抽象成员。11abstract class Apublic abstract void F();/抽象方法,注意该方法没有实现部分abstract class B : Apublic void G() class C : Bpublic override void F()/实现部分类B不提供F的实现,因此 也必须声明成抽象类12抽象类 例题4 注意:如果有一个通用方法,该方法对所有扩充类来说是公共 的,并且强制要求所有扩充类都必须实现这个方法,这 种情况下就可以把该方法定义为基类中的抽象方法。13

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号