抽象类和接口
Table of Contents
abstract
abstract class Car { abstract function func1(); } class Fastcar extends Car { public function func1() { ... } }
- 继承类必须实现抽象类的 所有 方法
- 抽象类可以有自己的属性
- 抽象类可以有自己的实现方法, 也叫具体方法, interface 没有
- 可以有 protected 方法, interface 不可以
interface
interface iUsb { public function f(); } class phone implements iUsb { public function f() { .. } }
定义规范
当多个类, 之间平级的, 有相同的方法, 但是实现不同
类可以实现多个接口, 接口可以实现多个接口
class t1 implements i1, i2, i3 { } interface i1 extends i2, i2, i3 {}
- 继承类要实现 接口的全部方法
- interface 不能有 private 的方法
- interface 里面的属性只能是 常量
- interface 里面不能实现方法, 抽象类可以, (可以理解接口里面全都是抽象方法)
- interface 可以定义常量
class Monkey { public function climb() { ... } } interface iBirdable { public function fly(); } interface iFishable { public function swim(); } class NewMonkey extends Monkey implements iBirdable, iFishable { public function fly() { ... } public function swim() { ... } }
抽象类和接口的区别
- 如果要创建一个模型, 这个模型将由一些紧密的对象采用, 就可以使用抽象类. 如果要创建由一些不相关对象采用的功能, 使用接口
- 如果必须从多个来源继承行为, 就使用接口. 接口可以实现多个, 不可以继承多个抽象类
- 如果所有的类会有共享一个公共的行为实现, 就使用抽象类, 并在其中的实现该行为, 在接口中无法实现具体方法