我正在学习OOP,我想我已经理解了抽象类,接口,但我仍然有问题要应用它们。
接口应该考虑到“a-a'的情况。继承应该用在' is-a'案例。
现在让我们说我要构建以下类:
MyExcel:
MyAccess:
我们的目标是建立像
这样的灵活代码Dim test as MyDataStream
test = MyAccess
在我希望从Access而不是Exel获取数据的情况下要灵活。
我可以构建一个名为MyDataStream的接口或抽象类。 Excel和Access将是一个DataStream(' Is-A')。另一方面,我可以说我的Excel-Class正在定义与连接类的契约,因为它想拥有它的方法。 MSDN给出以下判定标准:
如果您预计会创建多个版本的组件, 创建一个抽象类。 - >是的,我喜欢PowerPoint类,WebService类等等。所以这一点适用于使用抽象类。
抽象类应主要用于对象 密切相关,而界面最适合提供 不相关类的常用功能。 - >实际上我的课程只需要相同的功能。所以这一点适用于使用界面。
我只是不确定我要选择什么。 MyExcel'是一个' Datastream或MyExcel'有一个'数据流?
如果有人能告诉我什么是最好的选择和原因,那将是很棒的。
答案 0 :(得分:0)
我建议使用界面。继承通常很容易使用。
如MSDN所述,如果您需要的大部分内容都是代码重用,请尝试收集实用程序类中的常用功能。这也称为组合物。如果你需要做一些更具体的行为(NetworkFileSaver vs HarddriveFileSaver),抽象基类可能是你最好的选择,也称为继承。
假设您要将MyDataStream
抽象基类仅添加到MyExcel和WebService。稍后,您将需要MyExcel和MyPowerpoint中的FancyTextEditor
功能。你将如何解决这个问题?你不能把它变成一个抽象的基类,因为MyExcel需要有两个基类。您不能将其作为基类,继承自MyDataStream
,因为并非所有MyDataStream
都是FancyTextEditor
。
有关此主题的更多信息,请参阅Google的“继承与组合”#。