vba java对象_类java继承的VBA组合

但我想知道是否有更有效和简洁的方法来实现这一点。

考虑一下这个小测试用例。

陆地生物

'declaration

Public Sub eat()

End Sub

Public Sub breathe()

End Sub

Implements IAnimal

' method implementation

Private Sub IAnimal_eat()

Debug.Print "I'm eating something..."

End Sub

Private Sub IAnimal_breathe()

Debug.Print "I'm brething..."

End Sub

猫cls:动物的一个亚纲

Private super As IAnimal

Implements IAnimal

Private Sub Class_Initialize()

Set super = New Animal

End Sub

'#------------------------------------------------

' methods called when object is accessed as an IAnimal implementor.

' I HAVE TO re-implement all of them also here in the subclass (in java I don't need to. It's sufficient to implement them in the superclass)

Private Sub IAnimal_eat()

Me.eat

End Sub

Private Sub IAnimal_breathe()

Me.breathe

End Sub

'#--------------------------------------------------

' subclass-only methods

' To access those methods I MUST DECLARE the object as Cat (Dim tom as Cat)

Public Sub meow()

Debug.Print "meow..."

End Sub

'#------------------------------------------------

' superclass methods

' Since I need to declare the cat object as a Cat (see above)

' I'm FORCED TO explicitly re-implement all of the superclass methods,

' even those that I don't need to override

' otherwise I can't access them

'@Override

Public Sub eat()

Debug.print "I'm eating a fish!"

End Sub

'I'm forced to re-implement also this method, in order to use it directly on a *Cat* object

'@Unnecessary-Override

Public Sub breathe()

super.breathe

End Sub

测试.bas

Sub Main()

Dim snowball As IAnimal

Set snowball = New Cat

Dim tom As Cat

Set tom = New Cat

snowball.meow 'ERROR Method or data member not found

tom.meow '

' creates a Dog, another subclass of Animal

Dim pluto As Dog

Set pluto = New Dog

'create a collection for all my animals

Dim myPets As Collection

Set myPets = New Collection

myPets.Add tom

myPets.Add pluto

Call feed(myPets) '

'I 'm eating a fish

'meow...

'I 'm eating a bone

'woof...

End Sub

' a routine for showing how to manage an heterogeneous collection of animals

Sub feed(animals As Collection)

For Each a In animals

a.eat

If TypeOf a Is Cat Then

a.meow

End If

If TypeOf a Is Dog Then

a.woof

End If

Next

End Sub

打电话给

eat()

方法对猫和狗的对象和

具有特定的重写行为

仅子类方法

(就像

meow()

)

通过

异质动物群

给一个

feed

子例程,它可以“安全地”调用动物超类方法,并根据动物子类触发特定代码

这看起来很有效,但却很麻烦:假设你需要实现许多动物子类(狗、鸟、犰狳、鸭嘴兽、恶魔……)。

上面的模式迫使您:

在所有子类上重新实现IAnimal接口的所有方法

重新实现(再次)所有方法,从子类中公开它们,即使不需要重写。这是必需的,特别是如果您还想访问仅子类的方法。

所以问题是:是否有一种更高效/简洁的方法来实现这个示例(并限制每个子类的代码重写)?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
'------------------------------------------------------------------------------------------------------------------------------------------ '本示例旨在向您展示如何在VB6下实现真正的继承,如何使用DyCOMHelper创建类,并使用,它将带您进入VB6背后的COM世界,看看我们的类是如何运行的。 'DyCOMHelper创建的对象的特点: '1、可以像VB6下定义的对象一样去使用,虽然不是VB6机制创建,但是可以被VB6当作对象来识别使用。 '2、支持后期绑定,支持错误处理,支持多接口等常规应用。 '3、支持真正意义上的继承,本示例将说明这一点。 '4、所创建的对象是轻量对象,实例占用的起步空间更小,约VB类的1/5。 '5、函数调用速度高出20% 左右 '6、实例创建的速度,最大可以提高近10倍 '7、释放速度,最大可以提高近100倍。(以上速度来自于极限测试数据) '8、创建模式比VB6更丰富,VB6的类实例,是在堆上进行创建的,效率很低,DyComHelper可以选择堆、堆栈是进行创建,也可以从某个结构上创建,也可以用内置的定长管理器进行创建。 '9、从类实例外部,访问内部数据时,支持真正意义的指针式访问。 '10、使用DyCOMHelper创建类,将让您的系统支持成千上万个类,而不会担心效率问题。 ' '读这个示例您可能会问的问题: ' 1、类型库,怎么来的?目前是我使用工具手动创建。未来,我将推出VB6插件,在VB6下直接书写代码生成类型库并自动引用。 ' '使用前,请先执行下列顺序: ' 1、引用 Types目录下 DyCOMHelperType.tlb,TestInheritLib.tlb。 ' 2、按F8开始逐步断点执行,看看它是如何工作的。 '示例中,有三个类,Animal、Wolf、Demiwolf,分别是动物、狼、狼狗,狼狗继承自狼,狼继承自动物,动物派生自IDispatch。 '------------------------------------------------------------------------------------------------------------------------------------------

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值