程序设计 第四章VisualBasic面向对象技术_第1页
程序设计 第四章VisualBasic面向对象技术_第2页
程序设计 第四章VisualBasic面向对象技术_第3页
程序设计 第四章VisualBasic面向对象技术_第4页
程序设计 第四章VisualBasic面向对象技术_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章第四章 Visual Basic.NET 面向对象技术面向对象技术 4.1 类和对象类和对象4.2 属性和方法属性和方法4.3 封装、继承、多态封装、继承、多态4.4 接口接口 主要内容主要内容4.1 类和对象类和对象 类就是对具有相同数据和相同操作的一组相似对象类就是对具有相同数据和相同操作的一组相似对象的定义,也即是对具有相同属性和行为的一组相似的定义,也即是对具有相同属性和行为的一组相似对象的抽象。类是用来创建对象的模板,它包含所对象的抽象。类是用来创建对象的模板,它包含所创建对象的状态描述和方法定义,而对象只是类的创建对象的状态描述和方法定义,而对象只是类的一个实例。一个实例。

2、对象是客观世界中的事物或人们头脑中的各种概念对象是客观世界中的事物或人们头脑中的各种概念在计算机程序中的抽象表示,或者说,是现实世界在计算机程序中的抽象表示,或者说,是现实世界中个体的数据抽象模型,是面向对象程序设计的基中个体的数据抽象模型,是面向对象程序设计的基本元素。每个对象都有三个共同的特点:本元素。每个对象都有三个共同的特点: 它们都有自己的名字,以区别其他对象。它们都有自己的名字,以区别其他对象。 它们都有自己的状态,如球有自己的质地、颜色和大。它们都有自己的状态,如球有自己的质地、颜色和大。 它们都有自己的行为,如球可以滚动、停止或旋转。它们都有自己的行为,如球可以滚动、停止或旋转

3、。类的性质类的性质抽象性抽象性封装性封装性继承性继承性多态性多态性 4.1 类和对象类和对象 如何创建类?如何创建类? 使用使用Class语句。语句。Public | Private | Protected | Friend | Protected Friend _| Shadows MustInherit | NotInheritableClass 类名类名Inherits基类名基类名Implements 接口名接口名语句语句End Class 4.1 类和对象类和对象例:声明只含有公有变量的类例:声明只含有公有变量的类CustomerPublic Class Customer Public

4、 Name As String Public Address As String Public PhoneNumber As StringEnd Class4.1 类和对象类和对象 在哪创建类呢?在哪创建类呢?放在窗体或模块文件中放在窗体或模块文件中放在项目内的单独文件中放在项目内的单独文件中放在单独的项目中放在单独的项目中4.1 类和对象类和对象 创建对象也称为实例化对象。创建对象也称为实例化对象。 与声明简单变量不同,需要添加与声明简单变量不同,需要添加New关键字才能创建新对象。关键字才能创建新对象。Dim 对象名对象名 As New 类名类名Dim 对象名对象名 As 类名类名=New

5、 类名类名Dim x As New CustomerDim x As Customer=New Customer4.1 类和对象类和对象4.2 属性和方法属性和方法 如何创建属性?如何创建属性? 使用使用Property语句创建属性。语句创建属性。 因为属性可以有返回值,也可以赋值,创建属性的关键因为属性可以有返回值,也可以赋值,创建属性的关键就在于如何实现返回属性值和给属性赋值,所以分别使就在于如何实现返回属性值和给属性赋值,所以分别使用用Get语句和语句和Set语句实现。语句实现。Default Public | Private | Protected | Friend _| Protec

6、ted Friend ReadOnly | WriteOnly _Property 属属性名性名(ByVal 参数参数列表列表) As 类类型型Get 语语句句块块End GetSet(ByVal Value As 类类型型) 语语句句块块End SetEnd Class 属性举例属性举例Public Class Order Private mCost As Double Public mQuantity As Integer Public Property Cost() As Double Get Return mCost End Get Set(ByVal Value As Double)

7、 mCost = Value End Set End PropertyEnd Class4.2 属性和方法属性和方法 类和对象包含的内置过程称为方法。类和对象包含的内置过程称为方法。 向向Sub类添加过程或函数就向类添加类添加过程或函数就向类添加了一个新方法。了一个新方法。 如果用如果用Public关键字修饰就是公有的关键字修饰就是公有的 如果用如果用Private关键字修饰就是私有的,关键字修饰就是私有的,只能在类内部使用。只能在类内部使用。4.2 属性和方法属性和方法4.3 封装、继承、多态封装、继承、多态 封装:就是使其代码和数据变为内部封装:就是使其代码和数据变为内部的,使他们不再供外

8、部对象访问,除的,使他们不再供外部对象访问,除非通过定义良好的接口访问,也被称非通过定义良好的接口访问,也被称做数据隐藏。做数据隐藏。 继承:指从其它类派生新类的功能。继承:指从其它类派生新类的功能。 继承的种类:继承的种类: 公有继承:用公有继承:用Public关键字修饰。在其范围内关键字修饰。在其范围内没有任何限制,它可以被程序的任何一部分使没有任何限制,它可以被程序的任何一部分使用。用。 受保护继承:用受保护继承:用Protected关键字修饰。当基关键字修饰。当基类成员声明为受保护时,则再该类及其所有派类成员声明为受保护时,则再该类及其所有派生类中都可以使用它,但再其它地方则不能。生类

9、中都可以使用它,但再其它地方则不能。 私有继承:用私有继承:用Private关键字修饰。它只有在当关键字修饰。它只有在当前类中可以使用,在该类之外则不能访问它,前类中可以使用,在该类之外则不能访问它,在该类的任何派生类中也不能。换句话,就是在该类的任何派生类中也不能。换句话,就是停止继承过程。停止继承过程。 友元继承:用友元继承:用Friend关键字修饰。只可以访问关键字修饰。只可以访问当前程序和同一个程序集中的其它任何地方。当前程序和同一个程序集中的其它任何地方。4.3 封装、继承、多态封装、继承、多态 继承修饰符:继承修饰符:MustInherit:不能直接创建:不能直接创建MustInh

10、erit类对象,他们只能用作派生类对象,他们只能用作派生类的基类。类的基类。NotInheritable:不允许类用作基类。:不允许类用作基类。4.3 封装、继承、多态封装、继承、多态 MyBase、MyClass与继承与继承使用使用MyBase可以访问基类中原来版本的可以访问基类中原来版本的方法。换句话说,方法。换句话说,MyBase提供对当前类提供对当前类中已经重写的基类方法的访问。中已经重写的基类方法的访问。使用使用MyClass可以使用其基类中的所有可以使用其基类中的所有方法,就好像它们是不可重写的方法一方法,就好像它们是不可重写的方法一样样。4.3 封装、继承、多态封装、继承、多态C

11、lass Customer Public Name As String Public Address As String Public City As String Public State As String Public ZIP As String Public CustomerID As IntegerEnd ClassClass Employee Public Name As String Public Address As String Public City As String Public State As String Public ZIP As String Public S

12、alary As IntegerEnd ClassClass Person Public Name As String Public Address As String Public City As String Public State As String Public ZIP As String End Class4.3 封装、继承、多态封装、继承、多态Class Customer Inherits Person Public CustomerID As IntegerEnd ClassClass Employee Inherits Person Public Salary As Inte

13、gerEnd Class4.3 封装、继承、多态封装、继承、多态 Object在继承结构的最端。在继承结构的最端。 如果一个类没有明确继承自另一个类,如果一个类没有明确继承自另一个类,就默认为继承自就默认为继承自Object。4.3 封装、继承、多态封装、继承、多态ObjectPersonCustomerEmployeeProgrammerManager4.3 封装、继承、多态封装、继承、多态抽象类举例抽象类举例MustInherit Class Person Public Name As String Public Address As String Public City As Strin

14、g Public State As String Public ZIP As String Sub Print() Console.WriteLine(Name) Console.WriteLine(Address) Console.WriteLine(City & , & State & & ZIP) End SubEnd ClassClass Employee Inherits Person Public Salary As IntegerEnd Class 在抽象类中也可以定义抽象方法。在抽象类中也可以定义抽象方法。 抽象方法需要使用关键字抽象方法需要使用

15、关键字MustOverride 声声明,并且不提供具体实现。明,并且不提供具体实现。 如果一个类继承了含有抽象方法的泪,那么如果一个类继承了含有抽象方法的泪,那么就必须提供该方法的实现,或者该方法本身就必须提供该方法的实现,或者该方法本身也是抽象方法。也是抽象方法。4.3 封装、继承、多态封装、继承、多态MustInherit Class Person Public Name As String Public Address As String Public City As String Public State As String Public ZIP As String MustOverr

16、ide Sub PrintName() Sub Print() PrintName() Console.WriteLine(Address) Console.WriteLine(City & , & State & & ZIP) End SubEnd ClassClass Employee Inherits Person Overrides Sub PrintName() Console.Write(Employee) Console.WriteLine(Name) End Sub Public Salary As IntegerEnd Class 覆盖覆盖如果

17、派生类中的新方法与基类中方法如果派生类中的新方法与基类中方法同名而且参数列表也相同,则派生类同名而且参数列表也相同,则派生类中的新方法将覆盖(又称为重写)基中的新方法将覆盖(又称为重写)基类中同名方法,在这种情况下,当在类中同名方法,在这种情况下,当在派生类中或通过派生类的对象直接访派生类中或通过派生类的对象直接访问该方法名时,被访问的只能是派生问该方法名时,被访问的只能是派生类中的同名方法,这称为同名覆盖类中的同名方法,这称为同名覆盖(又叫同名重写)。(又叫同名重写)。4.3 封装、继承、多态封装、继承、多态关键字关键字描述描述Overridable允许某个类中的属性或方法在派生类中允许某个

18、类中的属性或方法在派生类中被覆盖。被覆盖。Overrides重写基类中定义为重写基类中定义为Overridable的属性或的属性或方法。方法。NotOverridable禁止某个属性或方法在派生类中被覆盖。禁止某个属性或方法在派生类中被覆盖。默认情况下,默认情况下,Public方法是方法是NotOverridable 。MustOverride要求基类中的属性或方法在使用前,必要求基类中的属性或方法在使用前,必须在派生类中被覆盖。当使用须在派生类中被覆盖。当使用MustOverride关键字时,方法定义时仅关键字时,方法定义时仅由由Sub、Function或或Property语句组成,语句组成

19、,不允许有其他语句,特别是不能有不允许有其他语句,特别是不能有End Sub或或End Function语句。此外,必须语句。此外,必须在在MustInherit类中声明类中声明MustOverride方法。方法。例:建立一个基类例:建立一个基类myBaseClass,声明一个允许覆,声明一个允许覆盖的方法盖的方法ShowInfo,再建立该类的一个派生类,再建立该类的一个派生类mySubClass,然后建立,然后建立mySubClass类的对象,类的对象,并在该对象中调用基类和子类中的方法。并在该对象中调用基类和子类中的方法。 4.3 封装、继承、多态封装、继承、多态第一步:建立一个第一步:建

20、立一个“Windows应用程序应用程序”项目。项目。第二步:执行第二步:执行“项目项目/添加类添加类”菜单命令,建立一个名为菜单命令,建立一个名为myBaseClass的基类,在其中定义一个可覆盖的基类,在其中定义一个可覆盖的方法的方法ShowInfo。 第三步:执行第三步:执行“项目项目/添加类添加类”菜单命令,建立一个菜单命令,建立一个名为名为mySubClass的子类,在其中定义一个与父类的子类,在其中定义一个与父类完全同名的方法完全同名的方法ShowInfo,它覆盖基类中的同名方,它覆盖基类中的同名方法,代码如下:法,代码如下:4.3 封装、继承、多态封装、继承、多态 第四步:在窗体上

21、建立两个按钮,并分别编写单击第四步:在窗体上建立两个按钮,并分别编写单击事件代码如下:事件代码如下:4.3 封装、继承、多态封装、继承、多态 多态性:这种功能能够使相同的代码多态性:这种功能能够使相同的代码操作不同类型的对象。操作不同类型的对象。 多态性的两种方法:多态性的两种方法:基于继承的多态性基于继承的多态性基于接口的多态性基于接口的多态性4.3 封装、继承、多态封装、继承、多态Module Module1 Sub Main() Dim two As New One() WriteLine(two.add(10) WriteLine(two.add(10, 20) Read() End

22、SubEnd ModulePublic Class One Public i, j, k As Integer Public Function add(ByVal i As Integer) As Integer Return i End Function Public Function add(ByVal i As Integer, ByVal j As Integer) _ As Integer Return i + j End FunctionEnd Class 4.4 接口接口 接口:是一套类成员规范,而不是实现,它接口:是一套类成员规范,而不是实现,它只是一种规范。当实现接口时,要编

23、写每个只是一种规范。当实现接口时,要编写每个类成员定义。类成员定义。 例,定义一个例,定义一个Person接口,包括接口,包括SetName和和GetName方法,以存储和返回人员名称:方法,以存储和返回人员名称:Public Interface PersonSub SetName(ByVal Name As String)Function GetName() As StringEnd Interface 当实现接口时需要使用当实现接口时需要使用Implement关键字。关键字。 具体实现如下:具体实现如下:Public Class Neighbor Implements Person Dim

24、 InternalName As String Sub SetName(ByVal Name As String) Implements Person.SetName InternalName=Name End Sub Function GetName() As String Implements Person.GetName Return InternalName End FunctionEnd Class4.4 接口接口 现在可以创建现在可以创建Neighbor类对象:类对象:Private Sub Button1_Click(ByVal sender As System.Object,

25、_ ByVal e As System.EventArgs) Handles Button1.Click Dim objNeighbor As New Neighbor objNeighbor.SetName(“Jill”) TextBox1.Text=“Your neighbor is” & objNeighbor.GetName()End Sub4.4 接口接口Creating an Interface named TestPublic Interface Test Specifying two methods in the interface Sub Disp() Function Multiply() As DoubleEnd InterfacePublic Class One Implements Test Public i As Double = 12 Public j As Double = 12.17 Public Sub Disp() Implements Tes

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论