界面和抽象的公共功能

时间:2010-03-03 12:35:12

标签: php interface abstract-function

在我看来,interfaceabstract function非常相似,

这就像是必须实施某种方法的订单,

那有什么区别?

2 个答案:

答案 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");
    }
}

通过:https://stackoverflow.com/users/9951/e-satis

答案 1 :(得分:1)

在没有多重继承的语言中,差异非常重要。在php或Java术语中,类可能实现多个接口,但只能从单个父类继承,这可能是抽象的。

例如,在c ++中,区别变得不那么重要了。