欢迎来到天天文库
浏览记录
ID:45726480
大小:267.50 KB
页数:60页
时间:2019-11-17
《第7章 继承和接口设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第7章继承和接口设计7.1继承7.2多态性7.3抽象类7.4接口7.5接口在集合排序中的应用7.6泛型编程7.1.1什么是继承一个类从另一个类派生出来时,称之为派生类或子类,被派生的类称为基类或父类。派生类从基类那里继承特性,派生类也可以作为其他类的基类,从一个基类派生出来的多层类形成了类的层次结构。7.1继承C#中只允许单继承,即一个派生类只能有一个基类。C#中继承是可传递的,如果C从B派生,B从A派生,那么C不仅继承B的成员,还继承A的成员。C#中派生类可添加新成员,但不能删除基类的成员。C#中派生类不
2、能继承基类的构造函数和析构函数,但能继承基类的属性。C#中派生类可隐藏基类的同名成员,如果在派生类可以隐藏了基类的同名成员,基类该成员在派生类中就不能被直接访问,只能通过“base.基类方法名”来访问。C#中派生类对象也是基类的对象,但基类对象却不一定是基派生类的对象。也就是说,基类的引用变量可以引用基派生类对象,而派生类的引用变量不可以引用基类对象。C#中的继承具有以下特点:7.1.2派生类的声明派生类的声明格式如下:[类修饰符]class派生类:基类;C#中派生类可以从它的基类中继承字段、属性、方法、事
3、件、索引器等。实际上除了构造函数和析构函数,派生类隐式地继承了基类的所有成员。classA{privateintn;//私有字段protectedintm;//保护的字段publicvoidafun()//公有方法{//方法的代码}}classB:A{privateintx;//私有字段publicvoidbfun()//公有方法{//方法的代码}}从中看出Base_fun()方法在B类中不用重写,因为B类继承了A类,所以可以不用重写A类中的Base_fun()方法,就可以被B类调用。在主函数中包含以下代码
4、:Bb=newB();//定义对象并实例化b.afun();7.1.3基类成员的可访问性派生类将获取基类的所有非私有数据和行为。如果希望在派生类中隐藏某些基类的成员,可以在基类中将这些成员设为private访问成员。7.1.4按次序调用构造函数和析构函数1.调用默认构造函数的次序如果类是从一个基类派生出来的,那么在调用这个派生类的默认构造函数之前会调用基类的默认构造函数。调用的次序将从最远的基类开始。classA//基类{publicA(){Console.WriteLine("调用类A的构造函数");}}
5、classB:A//从A派生类B{publicB(){Console.WriteLine("调用类B的构造函数");}}classC:B//从B派生类C{publicC(){Console.WriteLine("调用类C的构造函数");}}在主函数中执行以下语句:Cb=newC();//定义对象并实例化运行结果如下:调用类A的构造函数调用类B的构造函数调用类C的构造函数2.调用默认析构函数的次序当销毁对象时,它会按照相反的顺序来调用析构函数。首先调用派生类的析构函数,然后是最近基类的析构函数,最后才调用那个
6、最远的析构函数。classA//基类{~A(){Console.WriteLine("调用类A的析构函数");}}classB:A//从A派生类B{~B(){Console.WriteLine("调用类B的析构函数");}}classC:B//从B派生类C{~C(){Console.WriteLine("调用类C的析构函数");}}在主函数中执行语句Cb=newC();其运行结果如下:调用类C的析构函数调用类B的析构函数调用类A的析构函数3.调用重载构造函数的次序调用基类的重载构造函数需使用base关键字。
7、base关键字主要是为派生类调用基类成员提供一个简写的方法,可以在子类中使用base关键字访问的基类成员。调用基类中重载构造函数的方法是将派生类的重载构造函数作如下设计:public派生类名(参数列表1):base(参数列表2){}其中,“参数列表2”和“参数列表1”存在对应关系。同样,在通过“参数列表1”创建派生类的实例对象时,先以“参数列表2”调用基类的构造函数,再调用派生类的构造函数。【例7.1】分析以下程序的运行结果。usingSystem;namespaceProj7_1{classA{priv
8、ateintx;publicA(){Console.WriteLine("调用类A的构造函数");}publicA(intx1){x=x1;Console.WriteLine("调用类A的重载构造函数");}~A(){Console.WriteLine("A:x={0}",x);}}classB:A{privateinty;publicB(){Console.WriteLine("调用类B的构造函数");}pub
此文档下载收益归作者所有