接口(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)之间的区别
- 接口只包含抽象方法,而抽象类可以包含非抽象方法。
- 接口可以被多个类实现,而抽象类只能被一个子类继承。
- 接口没有任何属性,而抽象类可以包含属性。
- 接口不能被实例化,而抽象类可以被实例化。