接口(interface)和抽象类(abstract class)都是用来定义对象的行为的,但它们之间有一些重要的区别。
接口(interface)
接口是一组公共方法的集合,它提供了一种方式来定义对象的行为。它定义了一组规范,实现这些规范的类必须实现这些方法。接口没有任何属性,只有方法声明,它们可以被类实现。接口可以被多个类实现,也可以被一个类实现。
interface MyInterface { public function myMethod(); } class MyClass implements MyInterface { public function myMethod() { // do something } }
抽象类(abstract class)
抽象类是一种特殊的类,它可以包含抽象方法,这些抽象方法必须被子类实现。抽象类可以包含非抽象方法,也可以包含属性。抽象类不能被实例化,它只能被继承。
abstract class MyAbstractClass { abstract public function myAbstractMethod(); public function myConcreteMethod() { // do something } } class MyClass extends MyAbstractClass { public function myAbstractMethod() { // do something } }
接口(interface)和抽象类(abstract class)之间的区别
- 接口只包含抽象方法,而抽象类可以包含非抽象方法。
- 接口可以被多个类实现,而抽象类只能被一个子类继承。
- 接口没有任何属性,而抽象类可以包含属性。
- 接口不能被实例化,而抽象类可以被实例化。