c_面向对象编程(二)继承封装和多态

上传人:第*** 文档编号:49190075 上传时间:2018-07-25 格式:PPT 页数:22 大小:302.50KB
返回 下载 相关 举报
c_面向对象编程(二)继承封装和多态_第1页
第1页 / 共22页
c_面向对象编程(二)继承封装和多态_第2页
第2页 / 共22页
c_面向对象编程(二)继承封装和多态_第3页
第3页 / 共22页
c_面向对象编程(二)继承封装和多态_第4页
第4页 / 共22页
c_面向对象编程(二)继承封装和多态_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《c_面向对象编程(二)继承封装和多态》由会员分享,可在线阅读,更多相关《c_面向对象编程(二)继承封装和多态(22页珍藏版)》请在金锄头文库上搜索。

1、C#C#面向对象编程面向对象编程( (二二) ) 继承、封装和多态继承、封装和多态berryberry博客:博客:4.3 4.3 继承、封装和多态继承、封装和多态n n4.3.1 4.3.1 继承继承n n4.3.2 4.3.2 封装封装n n4.3.3 4.3.3 多态多态n n4.3.4 this4.3.4 this和和basebase关键字关键字4.3.1 4.3.1 类的继承类的继承继承的意思是一个类可以建立在另一个类的基础上,可 以继承另一个类的属性和方法。我们把被继承的类叫做基类 ,通过继承产生的类叫做派生类(也可以叫做父类和子类)。 继承的概念来源与现实的生活,比如汽车、轮船、火

2、车飞机 等就是继承于交通工具这个类,而汽车类中又可以派生出新 的类,比如轿车、面包车等等。引入继承可以让我们重用以前写过的代码,新编写的代 码可以在原来的基础上继承而来。在C#中继承的方式就是定义派生类。在C#中,所有的类都是通过直接或间接地继承Object类得 到的。1. 1. 派生子类派生子类定义派生类的基本形式:class 派生类名字:基类名字派生类的代码;public class Parent public Parent( ) 定义一个构造函数public void WriteItem( ) .定义方法 public class Child:Parent public Child( )

3、 派生类的构造函数public static void Main( ) Child a=new Child( );a.WriteItem( ); 派生类使用基 类的方法基类的构造函数先 执行再执行派生类 的构造函数。2. 2. 域的继承、添加与隐藏域的继承、添加与隐藏1、域的继承:子类可以继承父类的所有成员。2、域的添加:在子类定义中加上新的域变量,就可以使得子类 具有比父类多的属性。如:class Student: Person string school;int score; 子类比父类多了两个成员: school、score 。3、域的隐藏:子类重新定义一个从父类中继承的域变量。clas

4、s A public int a; class B:A new public int a;使用new修饰符来 隐藏父类的同名成 员a。3. 3. 方法的继承、添加与覆盖方法的继承、添加与覆盖1、方法的继承:子类可以继承父类的所有方法。2、方法的添加:在子类定义中加上新的方法,以针对子类实现 相应的功能。比如可以在Student类中定义分数的判断方法。 3、方法的覆盖:子类定义与父类同名的方法。(多态之一)(1)定义同名但参数列表不同的方法,称为方法的重载; (2)定义同名且参数列表也相同的方法,称为新增,这时应 该在同名方法前面用new修饰符;(3)定义同名且参数列表也相同的方法,并且父类中的

5、方法 用abstract/virtual进行修饰,子类中的方法用override进行了修饰 ,称为虚方法的覆盖。方法重载举例方法重载举例 class parent public int add( int x,int y ) return(x+y); class child:parent public int add(int x,int y ,int z) return(x+y+z); public static void Main( ) child c1=new child( );c1.add(1,2,3);c1.add(4,5); 分别使用了自己 和父类的方法。方法隐藏举例方法隐藏举例 cl

6、ass parent public int add( int x,int y ) return(x+y); class child:parent new public int add(int x,int y) return(x+y+10); public static void Main( ) child c1=new child( );c1.add(4,5); 使用了自己的方 法。虚方法覆盖举例虚方法覆盖举例Class one public void x( )Console.WriteLine(“one_x”);public virtual void y( )Console.WriteLin

7、e(“one_y”); Class two:one new public void x( )/隐藏父类中的同名方法Console.WriteLine(“two_x”);public override void y( )/重写同名方法 Console.WriteLine(“two_y”);Class test public static void Main( ) two m2=new m2();one m1=m2;/m1指向m2实例m1.x(); m2.x();m1.y( ); m2.y(); 结果:one_xtwo_xtwo_ytwo_y4.3.2 4.3.2 类的封装类的封装类的封装改变了用

8、户传统的使用数据和代码的方式,它将方 法和数据包含在一起构成一个独立的单元,可以通过设定单元 内各个成员的的特性来控制对成员的访问。比如将一个字段定 义为private,就可以防止外界直接访问这个字段。封装一个类由两种做法:1)为一个私有类定义公共读方法和写方法;2)使用属性,用set和get访问器。public class Student private string studentname;public string getstudentname( ) return(studentname);public string setstudentname(string na) studentna

9、me=na;class App public static void Main( )Student s1=new Student( );s1.setstudentname(“zhanghua”);Console.WriteLine(s1.getstudentname( ); 不能使用语句 s1.studentname=“zhanghua”;4.3.3 4.3.3 多态多态多态指的是定义具有不同功能但相同名称的方法或属性的 多个类的能力。C#中的多态可以由虚方法实现。对于非虚方法,其实现是不变的,无论由基类实例调用还 是由派生类实例调用都是相同的;而虚方法的实现可以由派 生类取代,取代的过程称为

10、重写。重写可以取代从基类继承 的虚方法,但原虚方法的可访问性不能改变,静态方法和非 虚方法不能被重写。基类 public virtual void Show( ) . 派生类 public override void Show( ) . 虚方法重写举例:定义基类圆形Round,有一个成员半径,编 写构造函数和计算面积的虚方法Area( );再定义一个派生类 球形Sphere,对虚方法Area进行重写。class Round public double r;public Round(double r) this.r=r; public virtual double Area( ) return(

11、3.14*r*r); class Sphere:Round public Sphere(double r):base(r) public override double Area( ) return(3.14*r*r*r); class App static void Main( ) Sphere s=new Sphere(2);Console.WriteLine(s.Area( ); 1. this1. this关键字关键字this关键字的作用是引用调用方法的当前实例,它可以从构造 函数、实例方法和实例访问器中访问成员。用法一:使用this来访问域和方法void sayHello( ) Co

12、nsole.WriteLine(“My name is”+name);与以下方法相同void sayHello( ) Console.WriteLine(“My name is”+this.name);用法二:解决局部变量与域同名问题public Student(string name,string number) this.name=name; this.number=number;4.3.4 this4.3.4 this和和basebase关键字关键字thisthis关键字举例关键字举例using System;public class Student public string name

13、;public string number;public double subsidy=180;public Student(string name,string number) this.name=name;this.number=number; public void ShowInfo( ) Console.WriteLine(“0n1”,name,num ber; Console.WriteLine(“0”,AdvSubsidy.Ca culate(this); public class AdvSubsidy public static double Caculate( student

14、E) return(1.5*(E.subsidy); public class AppMain public static void Main( ) Student s1=new Student(“zhanghua”, “ 200454240”);s1.ShowInfo( ); thisthis的注意事项的注意事项this指的是调用的“对象”本身(1)通过this不仅可以引用该类中定义的域和方 法,还可以引用该类的父类中定义的域和方法;(2)在static静态方法中,不能使用this关键字。2. base2. base关键字:关键字:basebase指的是父类指的是父类1) 明确指明父类的域和

15、方法,例如,父类Person中有一个域为 age,则在子类Student中用age 、 this.age 、 base.age来访问age是 完全一样的。2) 当子类的方法隐藏或覆盖了父类的同名方法但又要调用父类 的方法时,使用base关键字。3) 想使用父类的构造方法。构造方法是不能继承的,但子类可 以在构造方法中调用直接父类的构造方法,如Student(string name,int age,string school) :base(name,age) this.school=school;basebase(用法(用法2 2)举例)举例using System;public class A public int a=10;public void m( ) a+; Console.WriteLine(a);class B:A new public int a=20;new public void m( ) a+; / base.m( );Console.WriteLine(a);public static void Main( ) A x=new A( );Console.WriteLine(x.a); /10x.m( ); /11B y=new B( );Console.WriteLine(y.a); /20y.m( ); /11 21 如此处直

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

最新文档


当前位置:首页 > 中学教育 > 职业教育

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