1

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

这就像命令必须执行某些方法,

那么有什么区别呢?

4

2 回答 2

6

看看这个。

引用:(e-satis 很好的解释)

界面

接口是一种契约:编写接口的人说“嘿,我接受这样的东西”,使用接口的人说“好吧,我写的类是这样的”。

而接口是一个空壳,只有方法的签名(名称/参数/返回类型)。这些方法不包含任何内容。界面什么都做不了。这只是一个模式。

EG(伪代码):

// 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

于 2010-03-03T12:37:58.120 回答
1

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

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

于 2010-03-03T12:40:55.553 回答