当前位置:编程学习 > VB >>

MSDN的VB文档里关于多态真是讲得太不清楚了

看了好几遍,也讨论过好几次。

再看过去还是很不清晰。

写这个部分的人一定是自己也没搞懂。 --------------------编程问答-------------------- 至少的,它把多态和继承混为一谈,真让人受不了。

看这句:Most object-oriented programming systems provide polymorphism through inheritance. That is, the hypothetical Flea and Tyrannosaur classes might both inherit from an Animal class. Each class would override the Animal class's Bite method, in order to provide its own bite characteristics.

这可是讲多态的第一句话——奠定整篇乱糟糟的基调。 --------------------编程问答-------------------- VB6本来就不是面向对象的语言,你在这里面研究面向对象的技术当然容易乱糟糟了,如果我没记错的话VB6的继承、多态什么的都是通过接口来实现的! --------------------编程问答-------------------- 多态本来就包括继承、重载。 --------------------编程问答--------------------
引用楼主 slowgrace 的回复:
看了好几遍,也讨论过好几次。

再看过去还是很不清晰。

写这个部分的人一定是自己也没搞懂。
--------------------编程问答-------------------- 写得很清楚啊。不用继承和override,哪里还有什么多态? --------------------编程问答--------------------
MSDN:
Visual Basic 是如何提供多态的

大多数面向对象的程序设计系统,都是通过继承来提供多态的。也就是说,设想的 Flea 和 Tyrannosaur 类可能都是从某个 Animal 类继承来的。每个类都将重写 Animal 类的 Bite 方法,以提供自己的噬咬特点。

多态来自于这个事实:可以调用属于某类对象的 Bite 方法—该类可以是从 Animal 中派生出来的任意类,而不必知道该对象到底属于哪一个类。

概念很清楚。
再给一个多态的说明:
MSDN:
Polymorphism

Polymorphism means that any object will be able to do the right thing if you send it a message it understands. If I call the Hack method of a Programmer object, a Woodcutter object, and a Butcher object, each object should be able to Hack in its own special way without knowing who sent the message.
--------------------编程问答-------------------- 继承和多态完全是两个概念,虽然它们有点像。

最起码的,它们的语法就不一样。

继承
如果类B继承了类A的方法M1,那么可以这么写:


Dim ob As New B

Call ob.M1



多态
Dim oa As A
Dim ob As New B

Set oa = ob
Call oa.M1



多态是父类调子类的方法,继承是子类调父类的方法。这是完全不同的。在VB里压根没有继承。 --------------------编程问答-------------------- 多态是概念,不要与某些语言的语法混淆! --------------------编程问答--------------------
引用 7 楼 slowgrace 的回复:
继承和多态完全是两个概念,虽然它们有点像。

 最起码的,它们的语法就不一样。

继承
 如果类B继承了类A的方法M1,那么可以这么写:

VB codeDim obAsNew BCall ob.M1


多态
VB codeDim oaAs ADim obAsNew BSet oa= obCall oa.M1


 多态是父类调子类的方法,继承是子类调父类的方法。这是完全不同的。在VB里压根没有继承。

vb6中没有类的继承,但有接口的实现,在此基础上支持了多态。 --------------------编程问答-------------------- 我是在说概念啊。只不过写了个代码好让大家明白我的意思。

多态和继承是OO的两只脚,如果都像楼上几位理解的“多态就是继承”。那OO何必说自己的特色是重用、继承和多态,何必单列个多态出来呢?

从某种意义上说,多态和继承是OO的两个互补的方面。它们像,但是它们没关系。 --------------------编程问答-------------------- 总之,我觉得这句话“Most object-oriented programming systems provide polymorphism through inheritance.” 错误!

比如VC里实现多态是通过重载,没继承什么事儿。这个人如果潜意识里把重载理解为继承的话,那我觉得不大科学。 --------------------编程问答--------------------
引用 11 楼 slowgrace 的回复:
总之,我觉得这句话“Most object-oriented programming systems provide polymorphism through inheritance.” 错误!

 比如VC里实现多态是通过重载,没继承什么事儿。这个人如果潜意识里把重载理解为继承的话,那我觉得不大科学。

MS 也说了 Most 不是 All. 多态,重载,继承,封装是面向对象语言的特点,是抽象于各种实现语言的

‘------------------------------------------------
我的理解,重载和继承是多态的两种实现方法。也就是说多态在技术层面是通过继承和重载来实现的
我们虽然把多态,重载,继承都说是OO的特点,但是他们不是一个层面上的。我的理解说继承的话多从类之间的关系上来看;说多态更多的是从调用者的角度来看
所以说他们之间并非没有关系的
'----------------------------------------
突然让我想这些概念的东西好不习惯哦,要说错了大家纠正哈
--------------------编程问答-------------------- class1:
sub M1()
...
end sub

class2:
Implements class1

sub class1_M1()
...
end sub

dim i as class1
dim i2 as new class2
set i = i2
call i.M1


其实呢,你说的内容里面差了一个 接口继承的过程

这是所谓的多态的一个形式
其实我个人也同样认为,对象离不开继承
我也很纳闷,为什么把继承,多态还有xx 这3个东西放到所有oop编程的脑袋上,可能是我认识不够
但我认为,无论这些东西怎么改,都是在改一个数据结构而已,不同之处在于怎么改和何时改

type TheVB_New_Object
  iunknow as long * 3 = 12 byte
  idisxxx as long * 4 = 16 byte
  UserCustomSub as long * N = N byte
end type
重载和多态都是因为基类接口位置在这个结构中是固定的,修改固定函数入口,达到效果,前提没有继承基类怕是不行的,即便仅仅是接口继承


--------------------编程问答-------------------- c++的重载概念是否在oop中有定义?
貌似c++的重载一般都指不固定的参数类型函数,对于同名函数的任意参数类型的调用
是否有更高深的解, 请高手们教教我 --------------------编程问答-------------------- clear_zero,您能帮我把这帖移到COM子版么?

我本来只是想发泄一下,没想讨论的…… --------------------编程问答-------------------- 多态是一种思想方法:同一接口,不同场合自动适应,构成同一事物的多个(多)表现形式(态)。

具体来说,继承和重载体现了多态的思想。

VB本来就不是纯粹的面向对象的语言。至于说继承是子类调用父类,是因为VB不支持类继承而兜了个圈子。面向对象的语言使用虚拟函数、覆盖来实现继承多态的。 --------------------编程问答--------------------
引用 15 楼 slowgrace 的回复:
clear_zero,您能帮我把这帖移到COM子版么?

我本来只是想发泄一下,没想讨论的……

- - 她的职位不是没了吗 - - --------------------编程问答--------------------
引用 11 楼 slowgrace 的回复:
总之,我觉得这句话“Most object-oriented programming systems provide polymorphism through inheritance.” 错误!

比如VC里实现多态是通过重载,没继承什么事儿。这个人如果潜意识里把重载理解为继承的话,那我觉得不大科学。

重载是多态的另外一种形式,重载不是继承,但是是多态的一种形式。
至于在语言层面上重载也好,继承也好,可能有自己的实现办法。
比如VB靠可选参数也可以实现类似重载的功能。
早期的C++语言来自于结构化语言,靠虚表来实现虚拟函数。把对象的数据和方法分开,向方法传递this指针实现了类的封装性。现代的动态语言,比如Ruby,完全动态地管理类和对象。在.NET里面使用装箱拆箱来处理值类型对象……这些都是具体语言的实现形式而已。不要用实现去推测思想,要知道实现是思想方法+技术条件决定的。 --------------------编程问答--------------------
引用 16 楼 caozhy 的回复:
多态是一种思想方法:同一接口,不同场合自动适应,构成同一事物的多个(多)表现形式(态)。

具体来说,继承和重载体现了多态的思想。

VB本来就不是纯粹的面向对象的语言。至于说继承是子类调用父类,是因为VB不支持类继承而兜了个圈子。面向对象的语言使用虚拟函数、覆盖来实现继承多态的。

--------------------编程问答--------------------
引用 17 楼 aisac 的回复:
引用 15 楼 slowgrace 的回复:
clear_zero,您能帮我把这帖移到COM子版么?

我本来只是想发泄一下,没想讨论的……

- - 她的职位不是没了吗 - -


--------------------编程问答-------------------- 哪位版主帮俺移到COM子版吧,谢谢先。 --------------------编程问答-------------------- 学习学习!向楼主致敬! --------------------编程问答-------------------- 学习 楼主钻牛角的精神佳 --------------------编程问答--------------------
引用 15 楼 slowgrace 的回复:
clear_zero,您能帮我把这帖移到COM子版么?

 我本来只是想发泄一下,没想讨论的……


哪壶不开.....
piao~~~~~~ --------------------编程问答-------------------- PctGL,怕了你了,每次你一发言,就扯出一堆我看不懂的东东。 --------------------编程问答-------------------- 好吧,以后我不扯了 --------------------编程问答--------------------
引用 2 楼 citybird 的回复:
VB6本来就不是面向对象的语言,你在这里面研究面向对象的技术当然容易乱糟糟了,如果我没记错的话VB6的继承、多态什么的都是通过接口来实现的!

恩,就是的啊,就不要用VB来勉强了,还是使用真正的面向对象编程语言吧。 --------------------编程问答-------------------- 只有叉子是餐具,筷子就不是餐具了? --------------------编程问答-------------------- 个人意见:

多态是一种概念,继承是这个概念中的一个实现手段.

另,貌似VB里面对于多态的支持,仅达到"接口继承"的程度....

我老师玩接口继承玩得比较熟,那是05年的事了,可惜没有专心跟他学习,而现在的代码里也没有地方非用这功能不可,于是偷懒了..... --------------------编程问答-------------------- VB不支持继承和重载啊,最恨。。,,
VB面向对象能力太弱,写代码实在是苦不堪言。。。唉  现在换C++玩 --------------------编程问答-------------------- vb不支持
补充:VB ,  非技术类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,