同:抽象类和接口都是定义了父类,然后子类去继承。
下面讲讲不同的地方:
对于抽象类而言.
首先抽象类不能实例化.父类定义了一些抽象方法.在子类中,首先必须要继承这个抽象方法,然后可以选择性去扩展其他方法.
对于接口而言.父类定义的接口方法,在子类中必须全部继承父类中的接口方法.并且子类中可以继承多个父类的接口类.
/** * 抽象类.父类至少有一个抽象方法,并且子类必须继承. * Class ShopProduct */ abstract class ShopProduct { public function getPrice() { return "this is price method"; } abstract public function show(); } class BookProduct extends ShopProduct { public function show() { return "this is a book"; } }
/** * 接口类,父类定义规范,子类必须全部实现父类中定义的方法,及多继承的实现 * Interface OldProduct */ interface OldProduct { public function getPrice(); public function getSum(); } interface MidProduct { public function getColor(); } class NewProduct implements OldProduct, MidProduct { public function getPrice() { return "this is new price"; // TODO: Implement getPrice() method. } public function getSum() { return "this is a sum "; // TODO: Implement getSum() method. } public function getColor() { return "this is a color"; // TODO: Implement getColor() method. } }