求助:VB.NET类接口问题
本来学VB.NET时间不久,是菜鸟,这段时间在学习面向对象的知识,大部份我都能理解得了,就是那个类接口一直理解不了,看书里和例题都感觉很难理解,像抽象类我都能理解得了的,就这个问题一直困扰着我,寝食难安,希望能有高人指点我一下,可能是我钻进死胡同了,下面的按照我的意思编的一个例子,不知道理解得对不对,大家帮看一下:
我看书说接口最主要的功能就是解决子类中只能继承一个父类的问题
Interface interface2
Sub jiekou()
Function jiekou2()
End Interface
Interface interface1
Sub dingyi()
Function dingyi1()
End Interface
Interface interface3
Inherits interface1, interface2 ’接口3这个继承接口1和接口2可以吗
End Interface
---------------------------------------------------------------
Public Class class1
Implements interface1
Public Sub dingyi2() Implements interface1.dingyi '实现接口1中dingyi这个过程
MsgBox("接口1")
End Sub
Public Function dingyi1() As Object Implements interface1.dingyi1 ’实现接口1中dingyi1这个函数
Return 1
End Function
Public Sub oiu()
MsgBox("未实现接口1的过程")
End Sub
End Class
----------------------------------------------------
Public Class class2
Implements interface2
Public Sub jiekou() Implements interface2.jiekou '实现接口2中jiekou这个过程
MsgBox("接口2")
End Sub
Public Function jiekou2() As Object Implements interface2.jiekou2 '实现接口2中jiekou2这个过程
Return 2
End Function
Public Sub ewai()
MsgBox("未实现接口2的过程")
End Sub
End Class
上面是我定义了两个接口,interface1和interface2 以及实现这两个接口里方法的两个类class1和class2,我的问题在这:我不知道怎么调用这两个接口
按照我自己编的另一个类,想实现这两个接口里的功能(我的意思是相当我新建这个类要继承class1和class2这两个类),如何能做得?下面是我按我的思路编的一个类
Public Class class3
Dim a As interface1
Dim b As interface2
Sub test() '调用interface1接口中的dingyi过程
a.dingyi()
End Sub
Function text1() '调用了interface2接口中的jiekou2函数
Return b.jiekou2()
End Function
End Class
我个人理解是class3这个类使用了interface1和interface2这两个接口,并且调用了这两个接口中的dingyi过程和jiekou2函数,我在VS2010时编这个class3的过程中,没有提示什么或者警告之类的,语法上都能通过,但是就是运行的时候就出错,
比较我在command点击事件里实例化class3
dim p as new class3
p.test
运行后,就错了
提示没有使用new关键词,我上面还定义了一个interface3接口,里面继承了interface1和interface2这两个接口,不知道这样子行不行?
另个我在网看有这种语句
Dim a As interface1 =new class1
Dim b As interface2 =new class2
但是觉得这样子应该不对,我个人觉得像有了接口,就无须知道接口下的方法是具体由些类来实现的,要不然就没事找事了。
以上是我遇到的问题,求高人指教,帮我修改一下,最好能给我讲解就好了,我是自学的。但是既然碰到问题了,就不想去回避它。先谢谢了
[解决办法]
首先要明白面向对象是现实中来的,举的例子还是放在现实中比较好理解。
继承是对象的本质,“是一个”的关系,一般是名词。 猴子“是一个”动物,麻雀“是一个”动物
接口是 “能” 的关系,一般是动词。 猴子“能”移动,机器人“能”移动。
面向对象编程的核心是抽象,而不是写代码,你能把你的问题抽象的好,代码就很好写。
[解决办法]
Public Class class3
Dim a As interface1
Dim b As interface2
Sub test() '调用interface1接口中的dingyi过程
a.dingyi()
End Sub
Function text1() '调用了interface2接口中的jiekou2函数
Return b.jiekou2()
End Function
End Class
[解决办法]
其实,是你自己想太多了。你只要知道,接口其实也对象一部分就好了。就如你举得例子,你现在要在class3调用你的接口,我给你修改一下
Public Class class3 ‘初始化两个拥有接口的对象 Dim class1 As New class1 Dim class2 As New class2 Dim a As interface1 = CType(class1, interface1) Dim b As interface2 = CType(class2, interface2) Sub test() '调用interface1接口中的dingyi过程 a.dingyi() End Sub Function text1() '调用了interface2接口中的jiekou2函数 Return b.jiekou2() End Function’在添加一个窗体,两个按钮Public Class Form1 Dim c As New class3 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click c.test() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click MsgBox(c.text1) End SubEnd ClassEnd Class
[解决办法]
Public Class class3 '初始化两个拥有接口的对象 Dim class1 As New class1 Dim class2 As New class2 Dim a As interface1 = CType(class1, interface1) Dim b As interface2 = CType(class2, interface2) Sub test() '调用interface1接口中的dingyi过程 a.dingyi() End Sub Function text1() '调用了interface2接口中的jiekou2函数 Return b.jiekou2() End FunctionEnd Class'在添加一个窗体,两个按钮Public Class Form1 Dim c As New class3 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click c.test() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click MsgBox(c.text1) End SubEnd Class