PHP,OOP实用示例
我正在学习抽象类和接口之间的区别, 但当你没有实际的例子时,理论上的解释很难理解。 我读到: 通过更新基类,所有继承类都会随更改自动更新。另一方面,接口一旦创建就无法更改。如果需要新版本的接口,则必须创建一个全新的接口。 如果有人能为我提供一个实用的例子,我将非常感谢,PHP,OOP实用示例,php,oop,interface,abstract,Php,Oop,Interface,Abstract,我正在学习抽象类和接口之间的区别, 但当你没有实际的例子时,理论上的解释很难理解。 我读到: 通过更新基类,所有继承类都会随更改自动更新。另一方面,接口一旦创建就无法更改。如果需要新版本的接口,则必须创建一个全新的接口。 如果有人能为我提供一个实用的例子,我将非常感谢, 祝您度过愉快的一周。接口可以更改,您只需在继承类中实现所有更改。例如,您正在制作一个SpaceShip接口,您有CoolEnemyShip、StupidEnemyShip、PlayerShip,并且您向SpaceShip添加了一
祝您度过愉快的一周。接口可以更改,您只需在继承类中实现所有更改。例如,您正在制作一个SpaceShip接口,您有CoolEnemyShip、StupidEnemyShip、PlayerShip,并且您向SpaceShip添加了一个新函数以添加新的内容,例如Boost()函数,您必须在3个实现类(CoolEnemyShip、StupidEnemyShip、PlayerShip)中实现Boost()函数
另一方面,如果SpaceShip是一个基类,并且您在其中实现了Boost()函数,那么所有继承类都可以使用Boost()函数。这就是主要的区别,您不需要一行代码来理解它,只需要类比就足够了。接口可以更改,您只需要实现继承类中的所有更改。例如,您正在制作一个SpaceShip接口,您有CoolEnemyShip、StupidEnemyShip、PlayerShip,并且您向SpaceShip添加了一个新函数以添加新的内容,例如Boost()函数,您必须在3个实现类(CoolEnemyShip、StupidEnemyShip、PlayerShip)中实现Boost()函数
另一方面,如果SpaceShip是一个基类,并且您在其中实现了Boost()函数,那么所有继承类都可以使用Boost()函数。这是主要的区别,您不需要一行代码来理解它,只需要类比就足够了。考虑一下这个例子。我们有一个可驱动的接口、汽车抽象和一个同时使用这两者的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
中定义方法,我们可以轻松地向所有汽车添加方法。在那里添加的任何新方法都将可用于所有扩展类
然而,如果我们向可驱动接口添加一个方法,我们必须在每个实现该方法的类中寻找并实现该方法,以添加新方法,否则它将无法编译
例如,假设我们向接口添加一个
stop()
方法Pinto
将立即引发错误,因为它没有stop
方法 考虑这个例子。我们有一个可驱动的接口、汽车抽象和一个同时使用这两者的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
中定义方法,我们可以轻松地向所有汽车添加方法。在那里添加的任何新方法都将可用于所有扩展类
然而,如果我们向可驱动接口添加一个方法,我们必须在每个实现该方法的类中寻找并实现该方法,以添加新方法,否则它将无法编译
例如,假设我们向接口添加一个
stop()
方法Pinto
将立即引发错误,因为它没有stop
方法 抽象基类用于创建扩展类将继承的功能
接口用于定义一组严格的函数,这些函数必须由使用此接口的类实现
有一点重叠,抽象类可以将方法标记为抽象,将实现留给继承类。抽象基类用于创建扩展类将继承的功能 接口用于定义一组严格的函数,这些函数必须由使用此接口的类实现
抽象类可以将方法标记为抽象,将实现留给继承类,这一点有一点重叠。这个问题已经被问过很多次了()。这个问题已经被问过很多次了()。首先谢谢,你的解释是为一个优秀的,我想这个解释真的很好,但我不理解接口和抽象类之间的区别,如果你能编写与你的解释相协调的代码,我想它会帮助我理解,再次感谢。抽象类:可以实现方法。接口:要实现什么方法首先谢谢你,你的解释非常好,我想这个解释非常好,但我不理解接口和抽象类之间的区别,如果你能编写与你的解释相协调的代码,我想这会帮助我理解,再次感谢。抽象类:可以实现方法。接口:要实现什么方法如果我通过你的解释理解的话,当我们使用抽象类时,继承我们抽象类的类会覆盖我们的无体抽象类方法,或者它会继续它们并忽略方法的名称如果我通过你的解释理解的话,当我们使用抽象类时,继承抽象类的类会覆盖我们的无体抽象类方法,或者它会继续这些方法,并忽略方法的名称非常感谢,这是非常好的解释,我现在理解了,谢谢大家,祝你们一周愉快。@mike,这太棒了。这就解决了我头脑中令人震惊的困惑。非常感谢你们,这是一个很好的解释,我现在明白了,谢谢大家,祝你们一周愉快。@mike,这太棒了。这就解决了我头脑中令人震惊的困惑。这也是一个很好的例子