水果多态

之前看陈伟视频的时候总是那么的漫不经心,看过的东西也都跟过眼云烟似的,现在已经没有太多的印象了。开师徒会的时候,师父有提到要把视频中的那个水果的例子,还有米老师给的几个有趣的例子都敲一遍,留个印象,对作品展的时候会有帮助的。听到后那个心虚的呀 哪有这些例子嘛 我一个也没敲过啊  心里就这样忐忑着。。  老师后来给发例子了,真是虚惊一场。。

小例子还有一两个没实现,先总结水果储存的例子。该例子主要利用多态来实现。

简单介绍

多态

在面向对象语言中,接口的多种不同的实现方式即为多态。

(不同的事物接口可能一样 但是功能的实现可以不同,比如Fruit这个接口,Apple 和grape的运输和储存形式是不同的,当然具体到的某水果也不仅仅是apple和grape)

如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。


接口:

接口可以包含方法、属性、索引器和事件作为成员。

声明一个接口时,需要考虑以下几点:

1.接口主体只限于对方法,索引器以及属性的声明;

2.接口成员是隐式公开的,如果对其显式指定访问级别,就会出现编译器错误;

3.接口中不能包含字段,构造函数和常量等;

4.在接口中不能实现任何方法,属性或者索引器;

5.在指定方法时,只需要给出返回类型,名称和参数列表,然后分号结束。

总结为一句话就是接口中可以声明属性、方法、事件和类型(Structure),(但不能声明变量),但是并不能设置这些成员的具体值,也就是说,只能定义,不能给它里面定义的东西赋值。所以接口是专门被继承的。(如Fruit接口,被Apple、grape继承


水果多态例子1
1.先定义接口类,公共的。 可添加具体类的功能,实现具体属性  (Fruit接口类)

Option Explicit Public Property Get color() As Long '读(Get)/写(Let)属性过程。可在具体类(Apple,Orange)中实现。

End Property Public Sub save() '储存保鲜的功能 End Sub

该接口类既实现函数 又实现了属性过程
2.定义具体实现类  (Apple 、Grape类)
必须定义implements来实现    implements是一个类实现一个接口用的关键字,用来实现接口中定义的抽象方法

Option Explicit Implements Fruit Private mvarColor As Long Private Sub Class_Initialize() '初始化颜色 mvarColor = 2 End Sub Private Sub Fruit_save() '表示:苹果类 葡萄类实现水果这个接口的储存保鲜的功能 MsgBox "Apple Save" End Sub Public Property Get Fruit_color() As Long '只读颜色属性 Fruit_color = mvarColor End Property



水果存放例题  类模块来实现 用多态来判断
1.定义接口类  
Fruit接口类

Option Explicit Public Property Get CurWeight() As Double '当前重量 End Property Public Function ReduceWeight() As Double '减轻重量 End Function

2.苹果和橘子具体类的实现

Option Explicit Implements Fruit Private mvarTotalWeight As Double Private mvarCurWeight As Double '当前重量 Private Sub class_Initialize() '苹果初始重量为50 mvarTotalWeight = 50 mvarCurWeight = mvarTotalWeight End Sub Private Property Get Fruit_CurWeight() As Double Fruit_CurWeight = mvarCurWeight End Property Private Function Fruit_ReduceWeight() As Double '苹果的重量每天减少4,直到是原始重量的3/5 Dim oldWeight As Double '原始重量 oldWeight = mvarCurWeight '原始重量与当前重量相等 mvarCurWeight = mvarCurWeight - 4 If (mvarCurWeight < mvarTotalWeight * 3 / 5#) Then mvarCurWeight = mvarTotalWeight * 3 / 5 End If Fruit_ReduceWeight = oldWeight - mvarCurWeight '减少的重量为原始的减去目前的重量 End Function

橘子与苹果雷同

3.水果盒子类的实现  
先定义集合 集合中的元素为水果

Private mcol As Collection '集合

Public Sub AddFruit(aFruit As Fruit) mcol.Add aFruit '向集合中添加水果元素 End Sub
盒子初始化

Private Sub class_Initialize() Set mcol = New Collection '初始化先建立集合 End Sub


计算重量 (借用for each  过程略)

盒子终止 释放清空

Private Sub class_terminate() '类结束的时候 ReleaseFruits '清空盒子 Set mcol = Nothing '释放集合 End Sub


4.主程序窗体类的设计 ,将盒子实例化 , 创建盒子, 释放盒子  (过程略)


以上例子包含了多态的实现、定义接口类、定义实现类、给接口添加属性。使代码更加简洁。

对下面两句话的理解
一个接口可以有多个类:  比如1.Fruit这个接口 可以有Apple Orange Grape 等多个类  
                          2.eat 这个接口 可以有people  cat dog 等多个类
一个类可以实现多个接口:  people这个类 可以实现 eat sing write read 等多个接口。

以上都纯属个人理解,有错误的地方还望大家多多指点。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值