PHP,OOP实例

时间:2012-05-23 20:54:58

标签: php oop interface abstract

我正在学习抽象类和接口之间的区别, 但是当你没有实际的例子时,理论解释很难理解。 我读过: 通过更新基类,所有继承类都会随更改自动更新。另一方面,接口一旦创建就无法更改。如果需要新版本的接口,则必须创建一个全新的接口。 如果能有人请给我一个实际的例子,我将非常感谢, 祝你度过愉快的一周。

3 个答案:

答案 0 :(得分:2)

考虑这个例子。我们有一个可驱动的界面,汽车摘要和一个使用它们的Pinto类。

interface Drivable 
{
  public function go();
}

abstract class Automobile 
{
  public $type;

  public function getType() {
    return $this->type;
  }
}

class Pinto
    extends Automobile
    implements Drivable 
{
  public function go() {
    // code to make it go
  }
}

我们可以通过在Automobile中定义方法,轻松地为所有汽车添加方法。添加的任何新方法都可用于所有扩展类。

但是,如果我们向Drivable接口添加一个方法,我们必须在实现它的每个类中寻找并实现所述方法以添加新方法,否则它将无法编译。

例如,假设我们在界面中添加了stop()方法。 Pinto会立即引发错误,因为它没有stop方法。

答案 1 :(得分:1)

可以更改接口,只需要在继承类中实现所有更改。例如,你正在创建一个SpaceShip接口,你有CoolEnemyShip,StupidEnemyShip,PlayerShip,你已经向SpaceShip添加了一个新函数来添加新东西,比如Boost()函数,你必须在3实现中实现Boost()函数课程(CoolEnemyShip,StupidEnemyShip,PlayerShip)

另一方面,如果SpaceShip是基类,并且你实现了Boost()函数,那么所有继承类都将具有Boost()函数avaialble。这是主要的区别,你不应该需要一行代码来理解它,只是类比应该对你有所帮助。

答案 2 :(得分:1)

抽象基类用于创建扩展类将继承的功能。

接口用于定义必须由使用此接口的类实现的严格函数集。

有一些重叠,抽象类可以将方法标记为抽象,将实现留给继承类。