《定义类-继承》PPT课件.ppt
《《定义类-继承》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《定义类-继承》PPT课件.ppt(80页珍藏版)》请在三一办公上搜索。
1、第九章 定义类,继承专题,课程回顾,类的定义方法类的定义方法同结构体类似,只是类是使用class关键字进行定义的。,class 类型名 成员名1;类型名 成员名2;返回值类型 成员函数名(参数列表)/.,课程回顾,类的使用在 C#中,我们使用 new 运算符来创建类的对象。,类名 对象名=new 类名();,课程回顾,构造函数构造函数是指在创建类的对象时自动执行的函数,由它负责对类的对象进行初始化。构造函数其实就是定义这样的函数,它的名字与类的名字相同,并且不用定义返回类型,因为构造函数是不能返回值的。构造函数是一种强制性的约定,在创建类的对象时会自动调用它。,课程回顾,构造函数的定义,cla
2、ss(参数列表)/在这里初始化类的对象!,课程回顾,构造函数定义示例,class MyClass public MyClass()Console.WriteLine(“MyClass created!”);class Program static void Main(string args)MyClass myClass=new MyClass();,MyClass created!,课程回顾,带参数的构造函数,class MyClass public MyClass(string name)Console.WriteLine(“Hello,0!”,name);class Program st
3、atic void Main(string args)MyClass myClass=new MyClass(“somebody”);,Hello,somebody!,课程回顾,构造函数的重载,class MyClass public MyClass()Console.WriteLine(“Hello!”);public MyClass(string name)Console.WriteLine(“Hello,0!”,name);class Program static void Main(string args)MyClass myClass=new MyClass();MyClass my
4、Class=new MyClass(“somebody”);,Hello!Hello,somebody!,课程回顾,构造函数的强制性如果类中定义了构造函数,就必需在创建类的对象时使用适当的参数来调用它。,class MyClass public MyClass(string name)Console.WriteLine(“Hello,0!”,name);class Program static void Main(string args)/!MyClass myClass=new MyClass();,课程回顾,构造函数的强制性如果类中定义了构造函数,就必需在创建类的对象时使用适当的参数来调用
5、它。,class MyClass public MyClass(string name)Console.WriteLine(“Hello,0!”,name);class Program static void Main(string args)MyClass myClass=new MyClass(“test”);,课程回顾,构造函数总结 C#中如果没有定义构造函数则系统会提供一个缺省构造函数,但一旦类中提供了自定义的构造函数,则缺省构造函数将不会被提供,这一点要注意。,面向对象的关键特性继承,“继承”这个词的字面含义是:按照法律或遵照遗嘱接受死者的财产、职务、头衔、地位等。面向对象方法中的继
6、承与现实世界中的继承的意义基本相同,是指一个类完全继承了另一个类的所有内容(除私有成员),如字段、成员函数等。继承是一种父母与孩子的关系,孩子从父母那继承了一些父母的特点,并也有着与父母的不同之处。,课程内容回顾,继承关系中各类的地位和名称,父类、超类、基类,子类、派生类,我们通常把被继承的类称作基类,而把从基类继承出的新类称作派生类。,面向对象的关键特性继承,继承示例人与学生、教师、士兵之间的继承关系,父类、超类、基类,子类、派生类,课程内容回顾,继承的用法,class/父类定义class:/子类的定义,在定义派生类时,直接在派生类名字的后面跟上冒号并在其后写上基类的名字即可。,课程内容回顾
7、,继承使用示例,class Base public string BaseString;class Derive:Base public string DeriveString;,在这个例子中,基类Base中有一个名为BaseString的字段,而派生类Derive中除含有其自身定义的DeriveString外,还包含从基类中继承来的BaseString字段。,课程内容回顾,继承使用示例,Base baseObj=new Base();baseObj.BaseString=“SomeString”;Derive deriveObj=new Derive();deriveObj.DeriveSt
8、ring=“SomeString”;/在这里还可以访问基类中定义的字段和方法deriveObj.BaseString=“Some”;Console.WriteLine(0,deriveObj.BaseString);Console.WriteLine(0,baseObj.BaseString);,注:父类对象却不能调用子类中新增的字段和方法,课程内容回顾,什么是继承继承是指子类自动共享父类的字段和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。派生类从基类继承后,将通过类的继承
9、关系,使基类的公共的特性能够被派生类所共享,提高了软件的重用性。,继承,面向对象的关键特性继承,继承的使用示例,class 人 public string 姓名;public string 年龄;public void 吃饭(食物 食物表)/.class 学生:人 public string 年级;public void 学习(string 书名)/.class 教师:人 public string 所在学校;pu blic void 授课(string 课程名)/.,面向对象的关键特性继承,继承的使用示例,class Program static void Main(string args)
10、人 张三=new 人();张三.姓名=“张三”;张三.吃饭(new 食物/.);学生 李四=new 学生();李四.姓名=“李四”;李四.年级=“大二”;李四.吃饭(new 食物/.);,面向对象的关键特性继承,继承的使用示例(2),class 灯 public bool 打开的;public void 开()this.打开的=true;public void 关()this.打开的=false;class 可调亮台灯:灯 public int 亮度;pu blic void 调亮()this.亮度+;pu blic void 调暗()this.亮度-;,面向对象的关键特性继承,继承的使用示例
11、(2),class Program static void Main(string args)灯 普通灯=new 灯();普通灯.开();可调亮台灯 台灯=new 可调亮台灯();台灯.开();台灯.调亮();,class A public int i,j;public void showij()Console.WriteLine(i and j:0 1,i,j);class B:A public int k;public void showk()Console.WriteLine(k:0,k);public void sum()Console.WriteLine(i+j+k:0,i+j+k)
12、;,static void Main(string args)A superOb=new A();B subOb=new B();superOb.i=10;superOb.j=20;Console.WriteLine(父类的i和j为:);superOb.showij();subOb.i=7;subOb.j=8;subOb.k=9;Console.WriteLine(子类的i和j为:);subOb.showij();subOb.showk();Console.WriteLine(子类中i,j,k的和为:);subOb.sum();,子类B包括它的父类A中的所有成员。这就是为什么subOb 可以获
13、取i和j 以及调用showij()方法的原因。同样,sum()内部,i和j可以被直接引用。,继承的更多内容,找出下例中的问题,class Base public string BaseString;public Base(string baseString)BaseString=baseString;class Derive:Base public Derive()Console.WriteLine(“Create a Derive class instance!”);,继承的更多内容,错误原因分析,子类在创建对象执行构造函数之前会先执行父类中与之匹配的构造函数 在本例中 public Der
14、ive()/子类构造函数 与之匹配的基本构造函数应该是:public Base()而程序中只有public Base(string baseString)this.BaseString=baseString;所以错了,修改方法,class Program static void Main(string args)Derive cc=new Derive();class Base public string BaseString;public Base()public Base(string baseString)this.BaseString=baseString;class Derive:B
15、ase public Derive()Console.WriteLine(Create a Derive class instance!);,继承的更多内容,在哪调用基类Base的构造函数?使用base关键字调用基类的构造函数,如下:,class public()class:public():base(),继承的更多内容,使用base关键字解决之前的问题:,class Base public string BaseString;public Base(string baseString)this.BaseString=baseString;class Derive:Base public De
16、rive():base(“someString”)Console.WriteLine(“Create a Derive class instance!”);,继承的更多内容,在构造基类时,也可以使用派生类构造函数的参数来调用基类的构造函数如:,class Base public string BaseString;public Base(string baseString)this.BaseString=baseString;class Derive:Base public Derive(string theString):base(theString)Console.WriteLine(“C
17、reate a Derive class instance!”);,继承的更多内容,static void Main(string args)string TheString=df;TheClass c=new TheClass(TheString);Console.WriteLine(0,c.TheString);class TheClass public string TheString;public TheClass(string TheString)TheString=TheString;,this的用法,this 关键字用来引用类的当前实例。也就是说,在建立对象后,我们就可以使用th
18、is来存取此对象。this的作用1、可以用来解决名称相同的问题。(限定被相似的名称隐藏的成员)2、将对象作为参数传递到其他方法3、在重载构造函数时,可使用this关键字来调用已有的构造函数,public class Employee public string name;public string alias;public double salary=3000.00;public Employee(string name,string alias)this.name=name;this.alias=alias;public void printEmployee()Tax t=new Tax()
19、;Console.WriteLine(Name:0nAlias:1,name,alias);Console.WriteLine(Taxes:0:C,t.CalcTax(this);,public class Tax public double CalcTax(Employee E)return(0.08*(E.salary);Main()Employee emp=new Employee(“jack”,”manager”);emp.printEmployee();,继承的更多内容,重载构造函数的相互调用在重载构造函数时,可使用this关键字来调用其他已有的构造函数(注:两个构造函数都会执行)用
20、法如下:,class public()public():this(),继承的更多内容,重载构造函数的相互调用在重载构造函数相互调用示例,class TheClass public string TheString;public TheClass(string theString)this.TheString=theString;public():this(“none”),继承的更多内容,class Program static void Main(string args)student stu=new student();class student public string name;pub
21、lic int age;public student():this(jack,19)public student(string name,int age)this.name=name;this.age=age;Console.WriteLine(0,1,this.name,this.age);,占位符,在现实的生活中有时候需要特殊的表示字符,例如表示货币,时间,那该怎么办呢?不用担心,C#中有格式化标识符C或c Currency 货币格式 D或d Decimal 十进制格式(十进制整数,不要和.Net的Decimal数据类型混淆了)E或e Exponent 指数格式,占位符,F或f Fixed
22、 point 固定精度格式 G或g General 常用格式 N或n 用逗号分割千位的数字,比如1234将会被变成1,234 P或p Percentage 百分符号格式 R或r Round-trip 圆整(只用于浮点数)保证一个数字被转化成字符串以后可以再被转回成同样的数字 X或x Hex 16进制格式,占位符,static void Main(string args)int i=12345;Console.WriteLine(0:C,i);/货币 Console.WriteLine(0:D,i);/十进制数 Console.WriteLine(0:E,i);/科学技术法 Console.Wr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 定义类-继承 定义 继承 PPT 课件
链接地址:https://www.31ppt.com/p-5493587.html