报错提示:ObjectBase 类包含一个抽象方法,所以说该类必须被声明为抽象的或必须实现 SayHelloInterface 的 say() 方法。
根据报错提示修改代码如下:
interface SayHelloInterface
public function say();
abstract class ObjectBase implements SayHelloInterface
class HelloWorld extends ObjectBase
public function say()
echo 'Hello world!';
$obj = new HelloWorld();
$obj->say();
运行结果如下:
如果一个类 implements 了一个接口类,在自身的方法中必须实现该接口类中的方法吗?php版本:5.6.32测试代码如下:interface SayHelloInterface{public function say();}class ObjectBase implements SayHelloInterface{}class HelloWorld extends ObjectBase{pu...
和大多数面向对象的编程语言一样,在
PHP
中是不支持多重继承的。如果要
实现
多重继承功能,可以通过
接口
。
接口
的思想是指定一个
实现
了该
接口
的
类
必须
实现
的一系列函数。一般,我们用interface来声明一个
接口
,并在
接口
中声明一些方法(即函数),注意只是声明不用
实现
这个函数。然后,用class声明一个
类
并用implements去使用这个
接口
,再在
类
中把
接口
中的声明的方法进行
实现
。
日前项目中遇到一个问题:
有一个
接口
,这个
接口
定义了一种规范和标志,
接口
中只有一个初始化方法,
接口
的
实现
类
可能会有非常多,需要在容器启动过程中我们去手动初始化这个
接口
的所有
实现
类
,虽然在spring中我们可以直接配置,但是维护与使用时却不够优雅。
1. 以一个Config
接口
为例:
Java代码
publicinterfaceConfig{...
日前项目中遇到一个问题:
有一个
接口
,这个
接口
定义了一种规范和标志,
接口
中只有一个初始化方法,
接口
的
实现
类
可能会有非常多,所以现在容器启动过程中我们去手动初始化这个
接口
的所有
实现
类
,虽然在spring中我们可以直接配置,但是维护与使用时却不够优雅。
1. 以一个Config
接口
为例:
public interface Config {
1. 抽象
类
抽象
类
是一种特殊的
类
,不能被实例化,只能被继承。它定义了一些抽象方法(方法没有具体
实现
),子
类
必须
实现
这些抽象方法才能被实例化。抽象
类
可以包含具体的方法和属性,也可以包含抽象方法。使用抽象
类
可以
实现
代码复用和规范化。
2.
接口
接口
是一种规范或契约,定义了一组方法的签名(方法名、参数和返回
类
型),没有具体的
实现
。
类
可以
实现
一个或多个
接口
,
实现
接口
的
类
必须
实现
接口
中定义的所有方法。
接口
可以被认为是一种纯抽象
类
,只包含抽象方法和常量。使用
接口
可以
实现
多态性和代码复用。
下面是抽象
类
和
接口
的主要区别:
1.
实现
方式
抽象
类
通过继承来
实现
,子
类
必须
实现
所有抽象方法才能被实例化。而
接口
通过
实现
来
实现
,
类
必须
实现
接口
中定义的所有方法才能被实例化。
2. 方法的
实现
抽象
类
可以包含具体的方法和属性,子
类
可以继承这些具体的方法和属性。而
接口
只能包含抽象方法和常量,
实现
接口
的
类
必须自行
实现
所有方法。
3. 继承
一个
类
只能继承一个抽象
类
,但可以
实现
多个
接口
。这意味着
接口
更适合
实现
多重继承。
4. 使用场景
抽象
类
适用于具有相似功能的多个
类
,其中某些方法有共同的
实现
,又有些方法需要由子
类
实现
。
接口
适用于定义一个规范或契约,让不同的
类
实现
相同的方法,以
实现
多态性。
总的来说,抽象
类
和
接口
都是
实现
面向对象编程中的抽象概念的重要工具,它们的选择取决于具体的应用场景。