About interfaces
Possible Duplicate:
Interfaces: Why cant I seem to grasp them?
C中接口的用途是什么?< BR>如何在C、Java、Java中实现可扩展的模块化设计?< BR>
就我在接口方面的经验而言,我们使用了一个网格视图场景,其中列值来自不同的对象。
(例如:
1 2 3 |
IPUB有4个方法,由4个或5个不同的类实现。)与同班同学相比,除了上面提到的情况外,他们手头上有哪些案例?
我听说Java创建者轻视接口,或者说"如果我是一个有机会再设计Java的人,我永远不会把接口变成语言"。这也适用于C吗?他为什么这么说?我觉得我从来没有完全理解界面。请有人尽力解释。
编辑:这里是小鹅报价,见Java部分
接口可以被视为"可以做",而抽象/基类可以被视为"IS-A"。
所以狗是动物,所以你用的是一个基础类。狗可以做一个poo,所以poo是其他动物可能实现的接口上的一个方法。(垃圾案例)
前几天读我的OO书时,它假定应该避免具体的实例,优秀的OO编码人员总是编程到接口或基类。
考虑到这一点,也许值得一读一本好的OO/模式书,比如head-first设计模式。
接口为您提供了一种有效地拥有某种多重继承的方法(您不能从多个抽象基类继承)。如果你问自己为什么要禁止多类继承,只要从BJARNE StruouToup的一本书(C++)中阅读相关章节,你会发现它是如何变得过于复杂的。
另一个注意事项是,当您使用单元测试时,几乎您创建的每个接口都将至少有两个实现——真实的和模拟的。
当Java被开发时,有一种叫做"多重继承"的东西,其中可以从两个(或更多)不同的类派生类。
例如,你有一个"车辆"类和一个"动物"类,你可以有一个"马"类,这两个类都可以派生出来。
问题是,如果您想从两个具有相同函数名的类中派生一个类呢?您不能这样做,函数有两个底层实现。
例如,车辆和动物类可能有一个"move()"函数。好吧,如果你自己不重写它,那么当你调用horse.move()时会发生什么?没有定义!任何一个都可能被呼叫!
因此,在Java中,只能从一个类派生。但是如果您真的需要一个与多个类型兼容的类呢?例如,如果有数据库连接,则需要派生一个基类来使用数据库,但也需要能够像使用close()函数管理资源一样进行管理。
好吧,所以他们创建了"接口"。当您实现一个接口时,您不必担心下面的竞争代码,因为您必须自己实现它们。
人们普遍认为多重继承是一种"有害的"(比如goto),而接口是一种在没有负面影响的情况下获得好处的方式。但是,现在有其他方法可以做到这一点。比如"ducktyping",只要类实现了特性名,它们就可以很好地使用。
此外,Java现在可以嵌套类,所以如果您需要从两个类派生类,则可以从第二类派生一个内部类。
不同的方法有其优缺点,但接口并不是当今解决多重继承问题的唯一途径。
接口是这样的,所以您不需要为某个东西指定大量的函数代码。你只需要知道它的作用。有点像你需要租一辆家用车。
你需要知道a)它是一辆驱动和b)它有一个家庭大小的靴子。
你不需要知道汽车是如何工作的,发动机是如何工作的。你只需要知道它能做到a)和b)。这就是接口的目的。
在C中,我们不允许多重继承(即拥有一个以上的基类),因此,如果要定义一个以上接口的行为,就不能用类来实现。如果存在多个继承,则可以选择使用多个基类来执行此操作。
接口是一种契约:如果某个类实现了某个接口,那么该类保证具有某些方法。当从某个基类继承时,也可以使用相同的方法,但不能总是这样做。在这种情况下,接口很容易实现一种多重继承。
你应该在这里或这里或这里或这里看到答案
接口提供了一种使用某物的方法,而不必担心该事物是如何实现的。
如果你有一个接口