集成分为两种形式:一种是实现的继承(代码的继承)、一种是行为的继承(接口的集成)。
VB和COM一脉相承,继承接口就是继承行为,所以说VB不能继承是冤枉她了。你一定要用VB来实现代码的继承,他应该是做不到的。但是如果有老兄说只有代码的继承才是真正的继承,我会站出来反对的。第一个问题,因为你的两个父类有同名同形式的方法,用VC试试也应该是不可以的。

解决方案 »

  1.   

    VB6无继承、无多态、无多线程、无重载。
    可以说是一个伪OOP
      

  2.   

    yefm(百聊) 的观点不对。OOP的三个要素:继承、封装、多态。
    VB可以封装功能逻辑,这一点没有人反对吧;
    VB可以继承接口,这也是继承。
    VB对接口的继承也为对态提供了可能。
    所以没有理由说VB不能OOP。PS:OO和多线程有什么关系。最说VB并不是不能支持多线程,而是不能够像C那么方便。
      

  3.   

    回复人: Mittermeyer(疾风之狼) (  ) 信誉:100  2002-3-15 10:11:47  得分:0  
     
     
      yefm(百聊) 的观点不对。OOP的三个要素:继承、封装、多态。
    VB可以封装功能逻辑,这一点没有人反对吧;
    VB可以继承接口,这也是继承。
    VB对接口的继承也为对态提供了可能。
    所以没有理由说VB不能OOP。PS:OO和多线程有什么关系。最说VB并不是不能支持多线程,而是不能够像C那么方便。
     
     
    one too left 
    another too right(antonym of left)
      

  4.   

    同意“疾风之浪”的说法。在使用VB继承方式的时候必须深入了解所谓的接口是什么,最好看看Com的文档。实际上VB的对象就是Com对象。而VB的对象变量就是Com的指针。言归正传。你的Class1是一个包含a方法的接口。而Class2是没有任何方法的接口。仅使用接口继承是没有办法传递的。解决的方法是:
    1、在Class3中实现class12、在class2中聚合class1,然后在class3中继承class2,不过这样你就没有办法使用多太的特性。因为class2和class1的接口是不一样的。
      

  5.   

    这时程序员杂志2001年第十二期上的一个例子,首先建立一个新工程,然后添加一个新的类模块baseclass,在类模块中加入以下代码:
    public sub baseSub()
    end sub
    然后添加两个类模块,类名称分别定位impclass以及lmpclass2,然后在类的代码窗口中写入:
    lmplements baseclass '继承特性
    上面这行代码说明类lmpclass以及lmpclass2实现类baseclass。
    在lmpclass窗口中加入以下代码
    private sub baseclass_basesub()
    end sub
    private sub baseclass_basesub()
    endsub
      

  6.   

    推荐一本书《Visual Basic 高级编程》,大有文章
    不过看不懂不要怪我忘了什么出版社……好像是电力吧??
      

  7.   

    支持:cdccdc(大笨猫haha)的看法.
    VB不支持继承,多态,多线程.什么是继承? 
    PB体现得最完美,
    什么对象几乎都可以继承层次感非常好!什么是多态?
    看看VC里继承的类结构及其虚函数,那才是多态.VB只是一工具,RAD工具而已,还没有多线程的概念,
    做出来的是结构化的OOP工程而已.但是可以做的很快.
    --从这儿讲还是很好用的!
      

  8.   

    问一句楼上的老兄:PB就不是RAD的工具啦?VC也不过是工具罢了,大家都是平等的,只是侧重点不同,面向的应用不同。没有必要抑人扬己。C++就是完完全全的OO么?它需要支持C,就注定了悲哀。
      

  9.   

    tips:Visual Basic的类是否支持继承 VB最为人垢病的是它的面向对象特性。实际上VB是一种基于对象的开发工具。在VB中 
    建立的类是支持继承的。下面是范例: 首先建立一个新工程,然后添加一个新的类模块(Class Module),类名称设定为BaseClass。 
    然后在BaseClass中加入以下代码: Public Sub BaseSub() '虚拟特性,BaseSub在子类中实现 End Sub 然后添加两个类模块,类名称分别设定为ImpClass以及ImpClass2,然后在类的代码窗口中写入: 
    Implements BaseClass '继承特性 
    上面这行代码说明类ImpClass以及ImpClass2实现类BaseClass。 
    在ImpClass窗口中加入以下代码: 
    Private Sub BaseClass_BaseSub() '实现基类中的BaseSub方法 
    MsgBox "Hello. This is Imp. inherited from BaseClass" 
    End Sub 在ImpClass2中加入以下代码: 
    Private Sub BaseClass_BaseSub() 
    MsgBox "Hello. This is Imp2. inherited from BaseClass" 
    End Sub 完成了上面的类代码后,打开Form1,在上面添加一个CommandButton,在按钮的Click事件中 
    写入以下代码: Dim xImp As New ImpClass 
    Dim xIMp2 As New ImpClass2 
    Dim xBase As BaseClass Set xBase = xImp '多态特性 
    xBase.BaseSub 
    Set xBase = xIMp2 
    xBase.BaseSub 
    Set xBase = Nothing Set xImp = Nothing 
    Set xIMp2 = Nothing 
    运行程序,点击CommandButton,程序会先后弹出消息框,显示在ImpClass以及ImpClass2中 
    设定的消息。 
    从上面的代码中可以看到VB中是如何实现面向对象的特性:继承、虚拟以及多态的。只是同 
    诸如Java、C++、Object Pascal不同,VB将很多实现的细节隐藏了起来。 
    问:如何屏蔽掉窗体中的关闭按钮X? 
    答:可以使用API函数将窗体菜单中的 关闭 项灰掉,因为菜单同关闭按钮是关联的,这样关闭 
    按钮也会不可用。具体代码如下: Option Explicit Private Declare Function GetSystemMenu Lib "user32" _ 
    (ByVal hwnd As Long, ByVal bRevert As Long) As Long 
    Private Declare Function RemoveMenu Lib "user32" _ 
    (ByVal hMenu As Long, ByVal nPosition As Long, _ 
    ByVal wFlags As Long) As Long 
    Private Declare Function EnableMenuItem Lib "user32" _ 
    (ByVal hMenu As Long, ByVal wIDEnableItem As Long, _ 
    ByVal wEnable As Long) As Long Const SC_CLOSE = &HF060 Private Sub Form_Load() 
    Dim hMenu As Long hMenu = GetSystemMenu(Me.hwnd, 0) 
    RemoveMenu hMenu, &HF060, &H200& 
    Debug.Print EnableMenuItem(hMenu, SC_CLOSE, 1) 
    End Sub