1

我正在学习抽象类和接口之间的区别,但是当您没有实际示例时,很难理解理论解释。我已经读过:通过更新基类,所有继承类都会随着更改而自动更新。另一方面,接口一旦创建就不能更改。如果需要新版本的接口,则必须创建一个全新的接口。如果有人可以为我提供这行的一个实际例子,我将非常感激,祝你一周愉快。

4

3 回答 3

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方法。

于 2012-05-23T21:05:45.760 回答
1

接口是可以改变的,你只需要在继承类中实现所有的改变。例如,您正在制作一个 SpaceShip 接口并且您有 CoolEnemyShip、StupidEnemyShip、PlayerShip 并且您已经向 SpaceShip 添加了一个新函数以添加新的东西,例如 Boost() 函数,您必须在 3 实现中实现 Boost() 函数类(CoolEnemyShip、StupidEnemyShip、PlayerShip)

另一方面,如果 SpaceShip 是一个基类,并且您在其中实现了 Boost() 函数,那么所有继承类都将具有 Boost() 函数可用。这是主要区别,您不需要一行代码即可理解它,类比应该对您有足够的帮助。

于 2012-05-23T21:01:05.530 回答
1

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

接口用于定义一组严格的函数,这些函数必须由使用该接口的类实现。

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

于 2012-05-23T21:06:27.157 回答