抽象类可以有部分实现。它可以包含已经实现的方法,也可以有抽象方法,抽象方法没有实现,需要由继承的类来实现。abstract class Animal { // 已实现的方法 public function breathe() { echo "Breathing...\n"; } // 抽象方法 abstract public function makeSound(); } class Dog extends Animal { public function makeSound() { echo "Bark!\n"; } }
接口(interface)
接口中的所有方法默认没有实现,接口只声明方法签名,类必须实现接口中的所有方法。interface Animal { public function makeSound(); } class Dog implements Animal { public function makeSound() { echo "Bark!\n"; } }
3. 属性
抽象类(abstract class)
抽象类可以有属性(成员变量),可以定义它们的类型、访问修饰符(public、protected、private)以及默认值。abstract class Animal { protected $name; public $species; }
接口(interface)
接口不能有属性,只能定义常量。interface Animal { const LEGS = 4; }
4. 构造函数
抽象类(abstract class)
抽象类可以有构造函数,构造函数可以在父类中实现,并且可以被子类继承和调用。abstract class Animal { protected $name; public function __construct($name) { $this->name = $name; } }
接口(interface)
接口不能有构造函数,接口只定义方法,不关心实现细节。interface Animal { public function __construct($name); // 接口中的构造函数声明(但不能实现) }
5. 继承 / 实现
抽象类(abstract class)
PHP 支持单继承,即一个类只能继承一个抽象类。
抽象类可以继承其他类,也可以实现接口。
接口(interface)
PHP 支持多实现,即一个类可以实现多个接口。
接口不能继承其他类,但可以继承多个接口。interface Animal { public function makeSound(); } interface Mammal { public function giveBirth(); } class Dog implements Animal, Mammal { public function makeSound() { echo "Bark!\n"; } public function giveBirth() { echo "Giving birth to puppies\n"; } }