在 PHP 语言中,接口与抽象类之间的区别具体体现在哪些方面?
考察说明
考查对 PHP 面向对象中接口与抽象类核心区别的理解。
回答思路
- 【回答框架 1】接口使用 interface 关键字定义,抽象类使用 abstract class 定义。接口只能声明方法签名,不能包含方法实现;抽象类可以包含抽象方法和具体方法。
- 【回答框架 2】一个类可以实现多个接口,通过 implements 关键字;但只能继承一个抽象类,通过 extends 关键字。因此接口用于定义能力契约,抽象类用于定义基类模板。
- 【回答框架 3】接口中的方法默认是 public 且必须是 public;抽象类中的抽象方法可以是 public 或 protected。接口不能定义属性,但可以定义常量;抽象类可以定义属性。
- 【回答框架 4】接口强调能力的组合与多继承,抽象类强调代码复用与层级关系。若多个类有共同的行为但无共同祖先,用接口;若有共同基础实现,用抽象类。
- 【回答框架 5】在 PHP 8 中,接口可以定义构造函数和静态方法,但抽象类更灵活,支持属性、构造逻辑等。选择时需根据设计意图。
- 【关键点 1】接口用 interface 定义,抽象类用 abstract class 定义。
- 【关键点 2】接口只能有方法签名,抽象类可包含实现。
- 【关键点 3】一个类可实现多个接口,但只能继承一个抽象类。
- 【关键点 4】接口方法必须 public,抽象类方法可 protected。
- 【关键点 5】接口定义契约,抽象类提供模板复用。
- 【易错点 1】混淆接口与抽象类的用途,导致设计不合理。
- 【易错点 2】忽略接口方法默认 public 的限制。
- 【易错点 3】误以为抽象类可以多继承。