欢迎来到天天文库
浏览记录
ID:47003457
大小:1.61 MB
页数:67页
时间:2019-12-03
《面向对象编程进阶》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第四章面向对象编程进阶本章学习目标理解类的继承与多态的概念熟悉类型转换的方法掌握结构与接口的定义及用法掌握异常处理的方法掌握委托的定义及用法第四章面向对象编程进阶4.1类的继承与多态4.3类型转换4.4结构与接口4.6异常处理4.7委托4.1类的继承与多态4.1.1继承4.1.2多态4.1.1继承类的继承性:C#允许基于某一个已经定义的类来创建一个新类。基类:被继承的类,即父类。派生类:继承的类,即子类。4.1.1继承[访问修饰符]class类名:基类{[类主体]}访问修饰符:public:表示不限制对类的访问;internal:可被同一个项目的程
2、序访问;sealed:表示一个密封类,不能被继承。说明:如果对类不指定访问修饰符,则类的默认访问修饰符为internal定义派生类4.1.1继承classPerson{publicstringname;protectstringsex;intage;}classStudent:Person{stringstuNo;stringclassNo;}定义派生类4.1.1继承派生类只能继承于一个基类;派生类自然继承基类的成员,但不能继承基类的构造函数成员;类的继承可以传递。如C类继承B类,B类继承A类,则C类即具有B类和A类的成员;派生类是对基类的扩展,派
3、生类定义中可以声明新的成员,但不能消除已继承的基类成员;派生类定义中如果声明了与基类同名的成员,则基类的同名成员将被隐藏,从而使派生类不能直接访问同名的基类的成员;基类可以定义虚方法成员等,这样派生类能够重载这些成员以表现类的多态性。类的继承规则4.1.1继承派生类构造函数默认执行基类的无参构造函数,如果要执行基类有参构造函数,则必须在派生类构造函数的基表列表中指出;如果基类具有带参数的构造函数,则派生类必需具有向基类传递参数的带参构造函数;构造函数调用顺序:先基类后派生类。派生类析构函数析构函数调用顺序:先派生类后基类。4.1.1继承—base在
4、派生类中调用基类方法在构造函数中显式调用基类构造函数public派生类名(形参列表):base(基类构造函数实参列表)在方法中调用基类方法base.基类方法名(参数表)4.1.1继承—隐藏隐藏自动隐藏与基类同名的成员声明成员时,显式使用new修饰符隐藏实质上是使继承的成员在派生类成为不可见的。隐藏的成员并没有被删除,只是不能从派生类直接访问,通过基类能够直接访问它。4.1.2多态编译时实现的多态:如果一个类中有两个或两个以上的方法的名字相同,而它们的形参个数或形参类型有所不同,在程序编译时能够正确区别他们;运行时实现的多态:指在程序运行时,基类对象
5、执行一个基类与派生类都具有的同名方法调用时,程序可以根据基类对象类型的不同(基类还是派生类)进行正确的调用。实现方法:虚方法、抽象方法4.1.2多态—虚方法publicvirtual返回类型方法名(参数列表){[方法体]}基类中定义虚方法publicoverride返回类型方法名(参数列表){[方法体]}派生类中重写基类中定义虚方法4.1.2多态—虚方法几点说明:基类与派生类中的方法名、参数列表、返回类型必须完全一致;可被重写的基类方法是虚方法、抽象方法或重写方法(override修饰)virtual不能与static、abstract或overr
6、ide中任一个同时出现;override不能与new、static、virtual或abstract中任一个同时使用;4.1.2隐藏与多态实例隐藏与多态classA{publicvoidE(){Console.WriteLine(“A.E”);}publicvoidF(){Console.WriteLine(“A.F”);}publicvirtualvoidG(){Console.WriteLine(“A.G”);}}classB:A{publicvoidE(){Console.WriteLine(“B.E”);}publicnewvoidF(){
7、Console.WriteLine(“B.F”);}publicoverridevoidG(){Console.WriteLine(“B.G”);}}classTest{publicstaticvoidMain(){Bb=newB();Aa=b;a.E();b.E();a.F();b.F();a.G();b.G();}}输出结果:A.EB.EA.FB.FB.GB.G父类可以引用子类对象,父类引用只能调用子类继承自父类的方法,父类不能调用子类独有的方法。4.1.2隐藏与多态实例隐藏与多态classA{publicvirtualvoidF(){Cons
8、ole.WriteLine(“A.F”);}}classB:A{publicoverridevoidF(){Console
此文档下载收益归作者所有