![]() |
1
12
这些差异既有理论上的,也有实践上的:
示例-接口:
现在我们有了一系列的需求,这些需求将针对实现此功能的每个类进行检查。让我们创建一个抽象类及其子类:
一个完全不同的抽象类(与接口无关),其子类实现了我们的接口:
我们不必担心哪种检索器(cURL、PHP或Golden)会被传入,以及它们将如何实现目标,因为所有的检索器都应该具有相似的行为。你也可以用一个抽象类来实现这一点,但是你要根据类的祖先而不是它的能力来限制自己。 |
![]() |
2
6
多重继承与单一继承: 实施:
这是我脑子里想的。 |
![]() |
3
2
. 还没做完,你还得做完。因此,当您创建一个扩展抽象类的类时,您只是完成了从抽象类开始的工作。这也是为什么你不能实例化一个抽象类的原因;如果你把它抽象了,说明它是不完整的。它仍然需要一些额外的功能。 一个接口只保证某些方法(每个方法都有一定数量的参数)必须存在于实现它的类中。因此,以后,使用实现特定接口的类的程序员可以放心,他们可以调用该类上的某些方法。 |
![]() |
4
1
|
![]() |
5
1
下面是对两者区别的一个很好的描述: http://www.supertom.com/code/php_abstracts_and_interfaces.html 这一切归结为这样一个事实:extends是一个“is-a”关系,而implements是一个“has-a”关系。 |
![]() |
6
1
至于在实际应用中使用什么。。。归根结底,这取决于上下文。 question on here the other day about implementing a game using PHP . 在这里,他们有一个抽象类定义了一个怪物,任何怪物都可以基于这个抽象类。这允许继承默认的怪物属性。 而对于一个接口,您定义的是一种“接口”方法的一般要求(请原谅在解释中使用这个术语)。我最近做的一个项目就是一个例子。我在php中实现了一个soapclient,以便与来自第三方的soapserver进行交互。这个接口定义了服务器支持哪些soap方法,因此实现我的接口的任何类都必须定义这些方法。 |
![]() |
Schadre · C-plus编码错误 2 年前 |
![]() |
Nithin K · 即使类属性的类型正确,也会获取异常 2 年前 |
![]() |
amirreza870 · Python OOP-更改类文本 2 年前 |
![]() |
A_K · 使用cat或打印方法打印部分内容的子集闭包 2 年前 |
![]() |
Mo Fatah · 如何使用Python类打印数独板? 2 年前 |