在我看来,interface
和abstract function
非常相似,
这就像是必须实施某种方法的订单,
那有什么区别?
答案 0 :(得分:6)
<强> Have a look at this. 强>
引用:(非常好的解释,电子满意)
<强>接口强>
接口是一个契约:编写界面的人说“嘿,我接受看起来那样的东西”,使用界面的人说“好吧,我写的课看起来那样”。
并且接口是一个空壳,只有方法的签名(name / params / return类型)。这些方法不包含任何内容。界面无能为力。这只是一种模式。
E.G(伪代码):
// I say all motor vehicles should look like that :
interface MotorVehicle
{
void run();
int getFuel();
}
// my team mate complies and write vehicle looking that way
class Car implements MotoVehicle
{
int fuel;
void run()
{
print("Wrroooooooom");
}
int getFuel()
{
return this.fuel;
}
}
实现一个接口只占用很少的CPU,因为它不是一个类,只是一堆名称,因此没有昂贵的查找功能。这在嵌入式设备中非常重要。
抽象类
抽象类与接口不同,是类。使用起来比较昂贵,因为当你从它们继承时会有查找。
抽象类看起来很像接口,但它们还有更多东西:你可以为它们定义一个行为。它更多的是一个人说“这些类应该看起来像这样,他们有共同点,所以填补空白!”。
例如:
// I say all motor vehicles should look like that :
abstract class MotorVehicle
{
int fuel;
// they ALL have fuel, so why let others implement that ?
// let's make it for everybody
int getFuel()
{
return this.fuel;
}
// that can be very different, force them to provide their
// implementation
abstract void run();
}
// my team mate complies and write vehicle looking that way
class Car extends MotorVehicule
{
void run()
{
print("Wrroooooooom");
}
}
答案 1 :(得分:1)
在没有多重继承的语言中,差异非常重要。在php或Java术语中,类可能实现多个接口,但只能从单个父类继承,这可能是抽象的。
例如,在c ++中,区别变得不那么重要了。