我正在学习抽象类和接口之间的区别, 但是当你没有实际的例子时,理论解释很难理解。 我读过: 通过更新基类,所有继承类都会随更改自动更新。另一方面,接口一旦创建就无法更改。如果需要新版本的接口,则必须创建一个全新的接口。 如果能有人请给我一个实际的例子,我将非常感谢, 祝你度过愉快的一周。
答案 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)
抽象基类用于创建扩展类将继承的功能。
接口用于定义必须由使用此接口的类实现的严格函数集。
有一些重叠,抽象类可以将方法标记为抽象,将实现留给继承类。