单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,谢 谢!,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单元,3,面向对象的,C#,单元3 面向对象的C#,知识目标,(,1,)理解面向对象的封装性、继承性和多态性;,(,2,)掌握类的定义;,(,3,)掌握静态方法和静态类;,(,4,)掌握,C#,的继承语法;,(,5,)掌握接口的声明和实现的语法;,(,6,)理解抽象方法和接口的作用。,知识目标(1)理解面向对象的封装性、继承性和多态性;,能力目标,(,1,)能理解面向对象的封装性、继承性、多态性;,(,2,)能将常见的事物抽象成恰当的类;,(,3,)能正确定义类和类的成员,能使用访问修饰符控制封装程度;,(,4,)能以对象及对象与对象的相互作用来分析问题;,(,5,)能以继承表示实际问题中分类;,(,6,)能理解并使用接口约定不同类型对象的行为;,(,7,)能理解接口和抽象类的差别。,能力目标(1)能理解面向对象的封装性、继承性、多态性;,教学任务,任务,1,类的定义及使用,任务,2,构造函数,、静态成员和命名空间,任务,3,类的继承,任务,4,多态,任务,5,接口,教学任务任务1 类的定义及使用,单元,3,面向对象的,C#,任务,3,类的继承,单元3 面向对象的C#任务3 类的继承,引例,定义一个,Animal,类,包含,Type,属性,,toString(),方法和,sound(),方法,并派生出,Dog,类、,Cat,类,派生类拥有另外一个属性,Name,。,引例定义一个Animal类,包含Type属性,toStrin,知识储备,知识点,1,:类的继承。,知识点,2,:继承隐私保护。,知识点,3,:继承时构造函数的调用。,知识储备知识点1:类的继承。,知识点,1,:类的继承,C#,是一种面向对象的编程语言,它同样具有面向对象编程的一些特点。前面我们已经详细了解了类、对象、属性和构造函数等,它们是面向对象的基础知识,面向对象编程的更深层次的问题包括了继承性、多态性和异常等其他一些相关的知识。,继承性是从现有的类中派生出新类的功能,它能分析多态性的细微差别,并允许创建类层次结构,使用继承可以创建一个定义了多个相关项目共有特性的通用类。,知识点1:类的继承C#是一种面向对象的编程语言,它同样具有面,定义派生类,派生类能够继承基类的方法、特性等,但继承得到的成员也受作用域的限制,即使派生类继承得到基类成员,也可能无法访问。,派生类一般格式:,类型修饰符,class,类名:基类名,派生类成员;,定义派生类派生类能够继承基类的方法、特性等,但继承得到的成员,示例,public,class,A,public,A(),public,void,doA(),public,class,B,:,A,public,B(),public,void,doB(),public,class,Tester,public,void,Main(),A,a=,new,A,();,B,b=,new,B,();,b.doB();,b.doA();,a.doA();,a.doB();,/,非法继承,B,b1=,new,B,();,A,a1=(,A,)b1;,/B,对象可以调用强制转化为,A,类型,因为,B,继承自,A,示例 public class A public clas,知识点,2,:继承隐私保护,修饰符,类内部,子类,其他类,public,可以,可以,可以,protected,可以,可以,不可以,private,可以,不可以,不可以,说明:,如果父类中的成员只允许父类独有,不允许子类或其他类访问,则使用访问修饰符,private,,也就是说使用了,private,修饰符则只能在父类中使用。,如果父类中的成员,只允许父类和其派生类访问,不允许其他类访问,则在父类中用,protected,修饰该成员,当使用“,base,”关键字时,是可以访问父类成员的。,知识点2:继承隐私保护修饰符类内部子类其他类public可以,实践任务,1,描述一个长方体类(包含长宽高,带三个参数的构造函数,以及体积计算方法),并派生一个正方体类。,实践任务1描述一个长方体类(包含长宽高,带三个参数的构造函数,知识点,3,:继承时构造函数的调用,构造函数调用:,如果派生类的基类本身是另一个类的派生类,则构造函数的调用次序按由高到低顺序依次运行。,public,class,A,public,A(),Console,.WriteLine(,A,的构造函数,);,public,class,B,:,A,public,B(),Console,.WriteLine(,B,的构造函数,);,public,class,C,:,B,public,C(),Console,.WriteLine(,C,的构造函数,);,class,Program,static,void,Main(,string,args),C,c=,new,C,();,Console,.ReadKey();,知识点3:继承时构造函数的调用构造函数调用:如果派生类的基类,【例,3-9,】由长方形类派生出正方形类,正方形类的构造函数调用基类的构造函数。,class,Rectangle,protected,double,length;,private,double,width;,public,Rectangle(,double,l,double,w),length=l;,width=w;,class,Square,:,Rectangle,public,Square(,double,l):,base,(l,0),public,double,Area(),return,length*length;,class,Program,static,void,Main(,string,args),Console,.WriteLine(,请输入正方形的长:,);,Square,s=,new,Square,(,double,.Parse(,Console,.ReadLine();,Console,.WriteLine(,正方形的面积为:,0,s.Area();,Console,.ReadKey();,【例3-9】由长方形类派生出正方形类,正方形类的构造函数调用,继承的特性,1,、传递性,子类的子类具备其父类以及父类父类的属性和方法。,2,、单根性,C#,的继承有一个很重要的特性,继承是单继承,不支持多继承,即,一个子类只能有一个父类。,3,、密封性,在,.NET,类库中,绝大多数类可以以基类产生派生类。因为从面向对象编程的思想看,类具有开发性,即一个类为了具有很好的扩展性,是不能密封的,因为类一旦密封,则该类不再具有扩展的空间。,继承的特性1、传递性,密封类,密封类定义一般格式:,访问修饰符,sealed,class,类名称,密封类密封类定义一般格式:访问修饰符 sealed cl,密封方法,一般格式:,public class A,public,sealed,void show(),密封方法一般格式:public class A,Sealed,类与方法,被声明为,sealed,的类不能被继承,被声明为,sealed,的方法不能被重写,Sealed类与方法被声明为sealed的类不能被继承,调用基类的同名方法,已替换或重写了某个方法的派生类仍可以使用,base,关键字访问基类中的该方法。在派生类中声明与基类同名的方法,也叫方法的重写。在派生类重写基类方法后,如果想调用基类的同名方法,使用,base,关键字,public,class,A,public,void,DoWork(),public,class,B,:,A,public,new,void,DoWork(),base,.DoWork();,/A,类的,DoWork(),方法,调用基类的同名方法已替换或重写了某个方法的派生类仍可以使用,归纳总结,知识要点:,(,1,)派生类的定义方法;,(,2,),protected,访问修饰符作用;,(,3,)继承的顺序,继承的特点子类只能继承自一个父类;,(,4,)构造函数和方法的继承;,归纳总结知识要点:,引例分析与实现,定义一个,Animal,类,包含,Type,属性,,toString(),方法和,sound(),方法,并派生出,Dog,类、,Cat,类,派生类拥有另外一个属性,Name,。并在测试类中测试定义的类。,class,Animal,private,string,type;,public,string,Type,get,return,type;,set,type=,value,;,public,string,toString(),return,这是一个动物类,;,public,void,sound(),Console,.WriteLine(,动物声音,);,class,Cat,:,Animal,private,string,name;,public,string,Name,get,return,name;,set,name=,value,;,private,string,breed;,public,string,Breed,get,return,breed;,set,breed=,value,;,public,string,toString(),return,Cats name is,+name+,属于,+breed+,在被抚摸感到舒服的时候,会,;,public,void,sound(),Console,.WriteLine(,喵喵叫,);,class,AnimalTest,static,void,Main(,string,args),Animal,d1=,new,Dog,();,Animal,c1=,new,Cat,();,Dog,d=,new,Dog,();,d.Name=,吉娃娃,;,d.Breed=,哺乳类和肉食性,;,Console,.Write(d.toString();,d.sound();,Cat,c=,new,Cat,();,c.Name=,波斯猫,;,c.Breed=,哺乳类和肉食性,;,Console,.Write(c.toString();,c.sound();,Console,.ReadKey();,引例分析与实现定义一个Animal类,包含Type属性,to,拓展实践,定义一个交通工具(,Vehicle,)类,拥有轮子和重量两个公共属性,并派生出小汽车(,Car,)类添加载客人数属性,并定义显示车辆信息的方法。,拓展实践定义一个交通工具(Vehicle)类,拥有轮子和重量,