-2

任何人都可以用很好的例子来解释接口的概念。我搜索但没有找到一个好的答案。我仍然对这些概念感到困惑。

我从 Internet 上找到了一个接口示例,如下所示。该代码在没有具有相同输出的接口的情况下工作。那么它的目的是什么?或者它不是接口的真正实现?我需要从过程编码转向面向对象的编程。如果有人可以不用更复杂的技术语言来解释,那就更好了。

 <?php
interface IPillage
{
public function emptyBankAccounts();
public function burnDocuments();
}

class  Employee 
{
public function emptyBankAccounts()
{
echo "Call employees and ask to transfer funds to Swiss bank account";
}
public function burnDocuments()
{
echo "Torch the office suite of the employee";
}

}

class Executive  extends Employee implements IPillage
{
public function emptyBankAccounts()
{
echo "Call executive and ask to transfer funds to Swiss bank account";
}
public function burnDocuments()
{
echo "Torch the office suite of the executive";
}

}
$obj1=new Employee();
$obj2=new Executive();
$obj1->emptyBankAccounts();
echo '<br>';
$obj2->emptyBankAccounts();
?>
4

3 回答 3

1

许多语言只允许单继承,通过接口,您可以拥有一种多重继承……您可以从基类继承,同时也可以从许多接口继承。例如,你可以有很多类,比如人类、动物、卡车。它们当然是不同的,但是它们可以用一个叫做“to move”的方法来实现一个像“movable”这样的接口。在这种情况下,我可以从“可移动元素”的光学中引用三个不同的对象。我可以说 myHuman.move/myMonkey.move / my Truck.move.. 我确信我可以要求移动到任何对象实现了可移动界面,而不关心特定对象可以做的其他事情......要考虑一个界面,我必须考虑他们提供的功能。对不起,我的英语来自阿根廷。

于 2013-10-10T15:10:36.820 回答
0

正如 PraDes 所写,创建接口会创建一种契约。这确实是这里的关键概念。

假设您正在与其他开发人员团队一起开发一个项目。有几个新类需要编写,团队希望就通用方法/设计模式达成共识。每个人都同意这些类中的每一个都需要一个 foo 方法、一个 bar 方法和一个 baz 方法。这些方法如何工作的具体细节在每个类中都会有所不同。但是,它们应该具有相同的签名。

我们决定创建一个接口来命名每个类应该具有的方法(foo、bar、baz)以及它们的签名是什么(即它们采用什么参数)。现在,当我们每个人编写其中一个新类时,我们将“实现”接口。通过声明“MyClass”实现“MyInterface”,我们现在需要在我们的类中实现 foo、bar 和 baz 方法。如果我们不这样做,我们的 IDE、我们的编译器、我们的运行时环境等都会抛出一个错误。

于 2013-10-10T14:08:36.460 回答
0

界面:

不能被实例化。是一种特殊类型的抽象类,其中所有成员都没有任何实现。启用多态性。一个类可以实现多个接口。通常用于应用程序类:提供确保交互性的契约。

目标:确保某些东西是可互换的。实现接口的类需要包含所有实现,否则编译器会抛出错误。CAN-DO 关系。例如,学生可以注册,学生可以提交作业。

  public interface ICanEnrol
{
    void Enrol();
}

public interface ICanSubmit
{
    void Submit();
}

public class Student : ICanEnrol, ICanSubmit
{
    public void Enrol()
    {
        School.Send("enrolment");
    }

    public void Submit()
    {
        School.Send("report");
    }
}

public class Employee : ICanEnrol, ICanSubmit
{
    public void Enrol()
    {
        Company.Send("enrolment");
    }

    public void Submit()
    {
        Company.Send("report");
    }
}
于 2013-10-10T12:59:45.300 回答