《类的封装继承与多态.ppt》由会员分享,可在线阅读,更多相关《类的封装继承与多态.ppt(41页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、C#面向对象编程(二)继承、封装和多态9 继承、封装和多态ll 9.1 封装ll 9.2 继承ll 9.3 多态ll 9.4 this 和base 关键字ll 9.5 接口9.1 封装对象的原理l 什么是封装(encapsulation)u 封装的好处l 良好的封装能够减少耦合l 类内部的实现可以自由地修改l 类具有清晰的对外接口 类的封装改变了用户传统的使用数据和代码的方式.它将方法和数据包含在一起构成一个独立的单元,可以通过设定单元内各个成员的的特性来控制对成员的访问。比如将一个字段定义为private,就可以防止外界直接访问这个字段。数据隐藏l 封装性最有用的方式之一l 实现方法访问限制
2、修饰符public 无限制,允许任何人来访问protected internal=protected+internalInternal 允许项目或程序内部的类来访问protected 继承时子类可以对基类有完全访问权private 只允许同一个类中的成员访问l 属性也用来封装类的细节,并提供公用接口给该类的用户public class Student private string studentname;public string getstudentname()return(studentname);public string setstudentname(string na)student
3、name=na;class App public static void Main()Student s1=new Student();s1.setstudentname(“zhanghua”);Console.WriteLine(s1.getstudentname();不能使用语句s1.studentname=“zhanghua”;继承性(inheritance)l 一个类可以有能力直接从另一个类获得其代码和数据l 派生类从基类那里获得其所有的成员ll 例:l GUI 设计的Form look and feel 都是从.NET Form class 继承下来的Form1继承透视图l 如果Cl
4、ass Child 是继承Class Parent 而来 Child 的对象中包含一个Parent 的对象ChildParentpublic class Parent public int X;.public class Child:Parent public int Y;./client.Child obj;obj=new Child();obj.X=10;obj.Y=20;X:X:Y:Y:publicmethods如何访问基类成员?l 派生类可以调用基类的方法l 通过使用base 关键字l 派生类在访问基类的时候有一定的限制,不能访问 private 的成员;internal 的基类成员只
5、能被同一个程序集中的派生类访问public class Account public class Account public double balance;public double balance;public bool Withdraw(double public bool Withdraw(double amt)amt)balance-=amt;balance-=amt;return true;return true;public class CheckAccount:Account public class CheckAccount:Account public bool Withd
6、raw(double amt)public bool Withdraw(double amt)if(amt=if(amt=base base.balance).balance)return return base base.Withdraw(amt);.Withdraw(amt);else else return false;return false;继承 2-1Class Base/成员变量 int basevar;/成员函数 Base_fun1()/定义.Class Derived:Base/成员变量 int derivedvars;/成员函数 Derived_fun1()/定义.基类 v
7、oid main()Derived dr_obj=new Derived();dr_obj.Base_fun1();无需重新编写代码派生类狗 马继承 2-2动物基类派生类继承的层次结构示例Class Animal/成员变量 int eyes,nose;Animal()eyes=2;nose=1;void Pet_Animal()/定义 基类Class Dog:Animal/成员变量/成员函数 private Barking()/定义 private Wagging_Tail()派生类继承 C#中的类 public class Graduate:Student,Employee/成员变量/成员函
8、数 多重继承 允许多重接口实现C#只允许单一继承演示public class Person private string _name;private uint _age;public void GetInfo()Console.WriteLine(请输入您的姓名和年龄);_name=Console.ReadLine();_age=uint.Parse(Console.ReadLine();public void DislayInfo()Console.WriteLine(尊敬的 0,您的年龄为 1,_name,_age);public class Student:Person private
9、string _schoolname;private uint _engscore;private uint _mathscore;private uint _sciscore;private uint _totscore;public uint GetMarks()Console.WriteLine(“请输入学校名称);_schoolname=Console.ReadLine();Console.WriteLine(请输入英语、数学和自然科学的分数。);_engscore=uint.Parse(Console.ReadLine();_mathscore=uint.Parse(Console.
10、ReadLine();_sciscore=uint.Parse(Console.ReadLine();_totscore=_engscore+_mathscore+_sciscore;Console.WriteLine(所得总分为:0,_totscore);return _totscore;基类派生类public class UnderGraduate:Student public void Check()Console.WriteLine(要上升一级,要求总分不低于 150);if(this.GetMarks()=150)Console.WriteLine(“pass);elseConsol
11、e.WriteLine(“not pass);派生类public static void Main(string args)UnderGraduate objUnderGraduate=new UnderGraduate();objUnderGraduate.GetInfo();objUnderGraduate.DisplayInfo();objUnderGraduate.Check();ubasel用于从派生类中访问基类成员 l可以使用 base 关键字调用基类的构造函数uthisl用于调用本类的数据成员或方法l也可以不写 关键字 base和this构造函数1.构造函数不能继承2.在实例化子类对象时,会默认调用父类构造函数3.如果父类有多个构造函数,子类会默认调用无参的构造函数4.如果需要调用有参的默认函数,需要显示指明,需要使用base 关键字