版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计第1页,共73页,2023年,2月20日,星期四
面向对象程序设计简介3.1
继承、多态与接口3.2
接口
3.3第2页,共73页,2023年,2月20日,星期四3.1面向对象程序设计简介3.1.1面向对象的基本概念第3页,共73页,2023年,2月20日,星期四抽象软件开发使用的抽象主要有两类:过程抽象和数据抽象。过程抽象将整个系统的功能划分为若干部分数据抽象把系统中需要处理的数据和对这些数据的操作结合在一起第4页,共73页,2023年,2月20日,星期四封装2.目的:封装的主要目的是达到接口和实现的分离。1.定义:封装是指使用抽象数据类型将数据和基于数据的操作包装在一起。封装:第5页,共73页,2023年,2月20日,星期四类与对象1.对象(object)对象指的是一个实体的实例,在这个实体中包括了特定的属性数据和对这些数据进行操作的方法。2.类(class)类是一组具有相同数据结构和相同操作的对象的集合。在一个类中,每个对象都是类的实例,可以使用类中提供的方法。创建类的对象的操作,被称为类的实例化第6页,共73页,2023年,2月20日,星期四
3.1.2类的定义1.类的定义类的定义用关键字class来说明,完整的类定义的格式如下:第7页,共73页,2023年,2月20日,星期四
类修饰符class类名:基类名{... //类的成员定义}第8页,共73页,2023年,2月20日,星期四
2.类的修饰符类的修饰符用于设置类的访问权限,即对类进行封装。类的修饰符可以是以下几种之一或者是它们的组合,在类的定义中,同一修饰符不允许出现多次。第9页,共73页,2023年,2月20日,星期四
internal:表示受内部的,只有其所在同一程序集的文件中才能访问。 public:表示公有的,对该类的访问不会受到限制。第10页,共73页,2023年,2月20日,星期四
protected:表示受保护的,只能从所在类和所在类派生的子类进行访问。 private:表示私有的,私有访问是允许的最低访问级别,私有成员只有在声明它们的类中才是可访问的。第11页,共73页,2023年,2月20日,星期四
new:仅允许在嵌套类声明时,使用该修饰符表明类中隐藏了由基类中继承而来的、与基类中同名的成员。 partial:在整个同一程序集中定义分部类和结构。第12页,共73页,2023年,2月20日,星期四
abstract:表示该类为抽象类,不允许为该类建立类的实例。sealed:表示该类为密封类,不允许被继承。第13页,共73页,2023年,2月20日,星期四
3.类的实例使用new关键字可以建立类的实例。第14页,共73页,2023年,2月20日,星期四
3.1.3类的成员1.类的成员类型字段属性事件方法第15页,共73页,2023年,2月20日,星期四
2.类成员的访问修饰符(1)public(2)private(3)protected(4)internal第16页,共73页,2023年,2月20日,星期四
3.成员常量可以使用关键字const来声明类的常量成员,类的常量可以加上以下修饰符:new、public、protected、internal和private。第17页,共73页,2023年,2月20日,星期四修饰符修饰符用于限定类型以及类型成员的申明,c#中有13种修饰符,按功能可分为三部分:存取修饰符,类修饰符和成员修饰符.存取修饰符:
public:存取不受限制.
private:只有包含该成员的类可以存取.
internal:只有当前项目程序可以存取.
protected:只有包含该成员的类以及继承的类可以存取.第18页,共73页,2023年,2月20日,星期四修饰符(续)类修饰符:
abstract:可以被指示一个类只能作为其它类的基类.
sealed:指示一个类不能被继承.成员修饰符:
const:指定域或局部变量的值不能被改动.
event:声明一个事件.
extern:指示方法在外部实现.
readonly:指示一个域只能在声明时以及相同类的内部被赋值.
第19页,共73页,2023年,2月20日,星期四修饰符(续)成员修饰符(续):
static:静态成员,指一个成员属于类本身,而不是属于特定的对象.
abstract:抽象方法,指该方法没有实现的方法体.
override:对由基类继承成员的新实现(重写).
virtual:指示一个方法或存取器的实现可以在继承类中被覆盖(虚方法).第20页,共73页,2023年,2月20日,星期四
4.this关键字关键字this可用于引用类的当前实例,可以在构造函数类的方法和类的实例中使用。第21页,共73页,2023年,2月20日,星期四
5.静态成员与实例成员1.静态成员 如果字段、方法、属性、事件、运算符或构造函数声明时指定了static修饰符,就等于声明了一个静态成员。2.实例成员 如果字段、方法、属性、事件、下标指示器、构造函数或析构函数声明时没有指定static修饰符,那么此时声明的是一个实例成员(也称为非静态成员)。第22页,共73页,2023年,2月20日,星期四
类的非静态成员属于类的实例所有,每创建一个类的实例,都在内存中为非静态成员开辟了一块区域;而类的静态成员属于类所有,为这个类的所有实例所共享,无论这个类创建了多少个实例,一个静态成员在内存中只占有一块区域。静态成员成为类的全程成员,在整个类的使用全程范围内有效,静态成员变量可以充当类的全程标志或计数变量。第23页,共73页,2023年,2月20日,星期四
由于静态成员函数全体共用的特性,它不能访问一般的类数据成员,而只能访问静态数据成员。同时,静态成员函数也不能使用this关键字,因为它不仅仅属于某个具体的实例。第24页,共73页,2023年,2月20日,星期四
3.1.4构造函数构造函数是类中与类名同名的成员函数,当一个类的实例生成时,系统会自动调用构造函数对实例进行初始化。第25页,共73页,2023年,2月20日,星期四
3.1.5析构函数析构函数用于在实例生存周期结束时,执行一些必要的操作,例如释放存储空间、回收已分配的资源等。第26页,共73页,2023年,2月20日,星期四
3.1.6域、属性和方法为了保存类的实例的各种数据信息,C#给提供了两种方法:域(也称为字段)和属性。其中,属性实现了良好的数据封装和数据隐藏。第27页,共73页,2023年,2月20日,星期四字段在类块中声明字段的方式如下:
字段修饰符字段的类型
字段的名称
“字段”是包含在类或结构中的对象或值。字段使类可以封装数据。第28页,共73页,2023年,2月20日,星期四属性属性是这样的类成员:它们提供灵活的机制来读取、编写或计算私有字段的值。第29页,共73页,2023年,2月20日,星期四事件基于Windows的应用程序和Web应用程序都是基于事件驱动的应用程序,即根据事件来执行代码。第30页,共73页,2023年,2月20日,星期四方法方法的声明:[格式]:方法修饰符返回类型说明符方法名([形式参数说明列表])/*定义方法头*/{变量、数组的定义语句;其它可执行部分}第31页,共73页,2023年,2月20日,星期四
【案例20】温度转换本案例中将设计一个可以进行将摄氏温度转换为华氏温度的程序,效果如图3-1-5所示。第32页,共73页,2023年,2月20日,星期四
图3-1-5温度转换第33页,共73页,2023年,2月20日,星期四
在本例的实现过程中,将学习类的应用,案例实现过程如下。第34页,共73页,2023年,2月20日,星期四
1.创建项目2.代码编辑第35页,共73页,2023年,2月20日,星期四
【案例21】圆形计算本案例中将设计一个可以进行圆形周长与面积计算的程序,效果如图3-1-6所示。第36页,共73页,2023年,2月20日,星期四
图3-1-6圆形计算第37页,共73页,2023年,2月20日,星期四
在本例的实现过程中,将学习类的构造函数、属性和方法的应用,案例实现过程如下。第38页,共73页,2023年,2月20日,星期四
1.创建项目2.代码编辑第39页,共73页,2023年,2月20日,星期四3.2继承、多态与接口3.2.1继承1.继承的概念继承是指从已有的类型出发,在此基础上建立新的类型,新类型具备原有类型的功能和特性,也能在新类型中对原有类型的功能进行更新和扩展。继承的核心就是代码的重用。第40页,共73页,2023年,2月20日,星期四
新的类型继承了原有类型的特性,新类型称为原有类型的派生类(子类),原有类型称为新类型的基类(父类)。继承的主要特点。第41页,共73页,2023年,2月20日,星期四
2.继承的实现创建继承基类的派生类的定义格式如下:
class派生类名:基类名{ ... //派生类成员定义}第42页,共73页,2023年,2月20日,星期四派生类(续)访问修饰符“protected”可以将类成员的作用域限制在本类及其派生类中。2、Protected
访问修饰符第43页,共73页,2023年,2月20日,星期四在派生类中调用基类构造函数执行顺序因为派生类要使用基类,所以基类实例化必须在派生类实例化之前进行。调用特定的构造函数如果想要调用基类的非默认构造函数,那么必须使用base关键字。第44页,共73页,2023年,2月20日,星期四类的继承(1)C#中的派生类只能继承于一个类,派生类将继承基类的除构造函数和析构函数外的其他所有成员。(2)继承具有传递性,若A派生出类B,类B有派生出类C,则类C不仅继承了类B的成员,同样也继承了类A的成员。(3)派生类可以对基类的功能进行扩展,即派生类可以增加自己新的成员,但不能删除已继承的成员,只能不予使用。第45页,共73页,2023年,2月20日,星期四在派生类中使用基类成员当需要扩展基类方法的功能时,在派生类中调用基类方法是一个很好的选择。除了可以在派生类的重写方法中添加额外的功能之外,通过在新写的方法中调用基类方法,可以重用基类方法的代码。第46页,共73页,2023年,2月20日,星期四
3.继承中的覆盖与重载如果在派生类中,声明了与基类同名的成员,但成员方法的参数有所不同(就像函数的重载一样),此时称派生类成员对基类成员进行了重载。如果派生类定义了与基类成员同名的新成员,则新定义的这个成员就会覆盖已继承的成员,所继承的那个同名成员则不能再访问。第47页,共73页,2023年,2月20日,星期四密封类在C#中,有一种类称为密封类。当把某个类声明为密封类时,编译器将禁止所有类继承该类。把一个类声明为密封类的原因是为了防止该类被其它类继承,密封类的声明方法是在类名前加上sealed修饰符。一般情况下,类是不“密封的”,因为一旦把某个类声明为密封类,这个类将永远不能再扩展了。但是,如果某个类具有特殊的实现,并且不允许其他任何类继承该类,那么就需要把此类声明为密封类。第48页,共73页,2023年,2月20日,星期四
3.2.2多态1.多态的概念在C#中,多态的定义是:同一操作作用于不同的类的实例时,不同的类将进行不同的解释,最后产生不同的执行结果。第49页,共73页,2023年,2月20日,星期四
C#支持两种类型的多态:编译时的多态和运行时的多态。(1)编译时的多态:
编译时的多态性是通过方法的重载实现的,由于这些同名的重载方法或者参数类型不同或者参数个数不同,所以编译系统在编译期间就可以确定用户所调用的方法是哪一个重载方法。(2)运行时的多态:运行时的多态性是通过继承和虚成员来实现的。运行时的多态性是指系统在编译时不确定选用哪个重写方法,而是直到程序运行时,才根据实际情况决定采用哪个重写方法。第50页,共73页,2023年,2月20日,星期四
2.虚方法在类中的方法声明前加上virtual修饰符,就称之为虚方法,反之为非虚方法。使用virtual修饰符后,不允许再使用static、abstract或override修饰符。第51页,共73页,2023年,2月20日,星期四virtual关键字虚方法的定义要用到virtual关键字,如下所示:publicclassAnimal{publicvirtualvoidEat(){Console.WriteLine(″Eatsomething″);}}这样,Animal类的任何派生类都可以实现新的Eat()方法。第52页,共73页,2023年,2月20日,星期四override关键字如果在派生类中要重写基类方法,那么需要使用override关键字,如下所示:publicclassCat:Animal{publicoverridevoidEat(){Console.WriteLine(″Eatsmallanimals″);}}第53页,共73页,2023年,2月20日,星期四调用虚方法通过使用多态性,可以采用一种通用的方式来处理派生类。为此,可以认为派生类对象的类型是基类类型。当在程序中调用某个虚方法时,运行时可以判定应该具体调用哪个方法。事实上,系统将调用最底层的派生方法。如果原始虚方法没有被重写,那么最底层的派生方法就是原始虚方法,否则,最底层的派生方法就是相应对象中的重写方法。第54页,共73页,2023年,2月20日,星期四
3.2.3抽象类1.抽象类某些情况下,基类并不与具体的事物相联系,而是只表达一种抽象的概念,用来为它的派生类提供一个公共的接口,为此C#中引入了抽象类(abstractclass)的概念。第55页,共73页,2023年,2月20日,星期四
抽象类使用abstract修饰符进行说明,定义格式如下:abstractclass类名{ ...}第56页,共73页,2023年,2月20日,星期四
2.抽象方法由于抽象类本身表达的是抽象的概念,因此类中的许多方法并不一定要有具体的实现,而只是留出一个接口,来作为派生类重载的界面。第57页,共73页,2023年,2月20日,星期四
一个方法声明中如果加上abstract修饰符,则称该方法为抽象方法(abstractmethod)。第58页,共73页,2023年,2月20日,星期四
格式如下:修饰符abstract类型方法名称(参数);第59页,共73页,2023年,2月20日,星期四优点抽象方法的优点在于基类无需对抽象方法提供实现,但是基类的派生类必须为基类中的抽象方法提供实现。第60页,共73页,2023年,2月20日,星期四重写当派生类从抽象类中继承一个抽象方法时,派生类必须重写该抽象方法。这个规则在编译时强制实施。第61页,共73页,2023年,2月20日,星期四
【案例22】圆与圆柱本案例中将设计一个可以进行圆和圆柱体的计算的程序,效果如图3-2-3所示。第62页,共73页,2023年,2月20日,星期四
图3-2-3圆与圆柱第63页,共73页,2023年,2月20日,星期四
在本例的实现过程中,将学习类的继承的应用,案例实现过程如下。
1.创建项目2.代码编辑第64页,共73页,2023年,2月20日,星期四3.3接口3.3.1接口接口是用来组织类内容的一种程序结构,一个类可以实现多个接口。接口的定义格式如下:修饰符interface接口名称{ ... //接口成员定义}第65页,共73页,2023年,2月20日,星期四
3.3.2接
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年唐山幼儿师范高等专科学校单招综合素质考试题库附答案详解(综合卷)
- 2026年四川交通职业技术学院单招职业技能考试题库及答案详解(网校专用)
- 2026年四川体育职业学院单招职业技能考试题库含答案详解(b卷)
- 2026年四川体育职业学院单招职业适应性测试题库及一套完整答案详解
- 商业地产行业市场研究
- 中耳炎的药物研发动态
- 2025制造业数字化转型发展报告
- 儿科引流管护理要点
- 化疗药物过敏反应的应急处理
- 2026河南郑州十一中教育集团郑东校区(86中)招聘笔试备考题库及答案解析
- 120调度员基础知识课件
- 磷石膏无害化治理和综合利用项目可行性研究报告方案
- 校园快递外卖管理制度
- 2025年7月辽宁省普通高中学业水平合格性考试生物试题(原卷版)
- 2025年三轮电动车项目市场调查研究报告
- 医用化学(第三版)课件 -第14章 醇酚醚
- 儿童除颤课件
- (北京科电)GEX-2000技术使用说明(出版)
- 供电所所长讲安全课
- 医院感染管理办法全文
- 国家职业技术技能标准 X2-10-07-17 陶瓷产品设计师(试行)劳社厅发200633号
评论
0/150
提交评论