求解答关于接口的疑惑
vb.net吧
全部回复
仅看楼主
level 7
侍影香寒 楼主
我还是先举个例子来说明我的问题吧。
比如有两个类,人和狗。这两个类都有吃饭这个动作,但是人是吃肉,狗是吃骨头。
用接口的情况:
1,声明一个接口,其过程成员为吃饭
2,分别在人和狗这两个类中实现这个接口。
我也可以不用接口啊:
1,在人类中写一个吃肉的过程,名字叫吃饭。
2,在狗类中写一个吃骨头的过程,名字也叫吃饭。
似乎,第一种方法有点冗余,那么接口有什么优点?我直接在类里写不就可以了,干嘛要用接口,多此一举。求答疑。
2015年09月26日 11点09分 1
level 13
因为vb不支持多重继承。此贴终结。
2015年09月26日 11点09分 2
你的意思是传统的类继承不支持多重继承,而接口支持多重继承,所以解决了不支持多重继承的问题,是这样理解的吗
2015年09月26日 12点09分
@侍影香寒 是这个意思。vb这样设计比直接让类能够多重继承少了很多麻烦的情况,编写类的时候不会有太多顾虑。
2015年09月26日 12点09分
@Nukepayload2 感谢答疑,似乎是有点懂了,但不是很透彻,可否举个通俗的例子让我理解接口在多继承上的优势。非常感谢
2015年09月26日 12点09分
level 13
比如你要写个类表示平板电脑,继承自一个类叫准系统。
它实现了 可触摸,有蓝牙,有WLAN,有4G...等一堆接口。一些接口有共性,比如 有WLAN 和 有蓝牙 的前提是 能够收发信号。这中间就涉及到了多重继承。让接口多重继承可以少写一些代码,改的时候也方便。
有些语言是支持类的多重继承的,比如c++。那么问题来了,有WLAN 这个类有 连接 和 断开两个没有参数的方法,蓝牙也有,这是不冲突的,因为它们的这两个方法是从同一个基类来的。要是以后改代码了,多了个无线充电,它也有断开和连接两个方法,凑巧都是没有参数的。但是显然不是从 能够收发信号 这个基类来的。使用类的多重继承就会让这两个方法冲突。或者是 断开和连接两个方法没冲突。
如果仅仅是接口多重继承,即使有冲突也没关系,因为没有相关的实现。
用代码表述就是这个了。
Public Class MyTabletPC
Implements IBluetooth, IWLAN, IWirelessCharge
Public Sub Connect() Implements IWirelessCharge.Connect
Throw New NotImplementedException()
End Sub
Public Sub Disconnect() Implements IWirelessCharge.Disconnect
Throw New NotImplementedException()
End Sub
Public Sub Ping() Implements IWLAN.Ping
Throw New NotImplementedException()
End Sub
Public Sub TransferFile() Implements IBluetooth.TransferFile
Throw New NotImplementedException()
End Sub
Private Sub IWirelessSignal_Connect() Implements IWirelessSignal.Connect
Throw New NotImplementedException()
End Sub
Private Sub IWirelessSignal_Disconnect() Implements IWirelessSignal.Disconnect
Throw New NotImplementedException()
End Sub
End Class
Public Interface IWirelessCharge
Sub Connect()
Sub Disconnect()
End Interface
Public Interface IWirelessSignal
Sub Connect()
Sub Disconnect()
End Interface
Public Interface IBluetooth
Inherits IWirelessSignal
Sub TransferFile()
End Interface
Public Interface IWLAN
Inherits IWirelessSignal
Sub Ping()
End Interface
2015年09月26日 12点09分 3
我写的时候用电脑这个词代替准系统了。
2015年09月26日 12点09分
@Nukepayload2 哇,你还写了代码,太感谢了[真棒]
2015年09月26日 12点09分
1