首页 > 代码库 > 类的继承 接口interface/implements
类的继承 接口interface/implements
继承:
关键字:extends,使一个类继承并拥有另一个已经存在类的成员属性和方法,被继承的类称为父类或基类,继承类为子类;
public: 方法或者属性在任何作用域下都可以访问到,而且是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public。
protected:本类和子类可以访问,外部对象不可以调用。
private: 只能在本类访问,子类与外部对象都不可能调用。经过private标记的方法或者属性可以在继承类中重新定义,每一个类只能看到它自己定义 的私有方法。
<?php header(‘content-type:text/html;charset=utf8‘); class father{ protected $name; function __construct($name){ //构造函数 $this->name=$name; } function work(){ echo "{$this->name}我在工作"; } function __destruct(){ //析构函数 } } class son extends father{ //继承父类 function play(){ echo "{$this->name}我在玩游戏"; } } $my_father=new father("爸爸"); //创建父类对象 $my_father->work(); $my_son=new son("儿子"); $my_son->work(); $my_son->play(); ?>
PHP类是单继承,也就是不支持多继承,当一个类需要多个类的功能时,继承就无能为力了,为此PHP引入了接口技术;
一个类可以继承多个接口;一个类只能继承一个抽象类;
接口interface/implements:
接口定义:如果一个抽象类里面的所有方法都是抽象方法,且没有声明变量,而且接口里面所有的成员都是public权限的,那么这种特殊的抽象类就叫接口;
接口使用interface关键字定义,并使用implements来实现接口的方法,且必须完全实现;
实现一个接口:
<?php interface Fruit{ const MAX_WEIGHT = 5; //此处不用声明,就是一个静态常量 function setName($name); function getName(); } //实现接口 class Apple implements Fruit{ private $name; function getName() { return $this->name; } function setName($_name) { $this->name = $_name; } } $apple = new Apple(); //创建对象 $apple->setName("苹果"); echo "创建了一个" . $apple->getName(); echo "<br />"; echo "MAX_GRADE is " . Apple::MAX_WEIGHT; //静态常量 ?>
实现多个接口:
<?php interface IEmployee{...} interface IDeveloper{...} interface IPillage{...} class Employee implements IEmployee,IDeveloper,iPillage { ... } class Contractor implements IEmployee,IDeveloper { ... } ?>
抽象类和接口的区别
接口是一个特殊的抽象类,也可以看作是一个模型的规范。接口与抽象类大致区别如下:
一个子类如果implements一个接口,就必须实现接口中的所有方法(不管是否需要);如果继承一个抽象类,只需要实现需要的方法即可;
如果一个接口中定义的方法名改变了,那么所有实现此接口的子类需要同步更新方法名;而抽象类中如果方法名改变了,其子类对应的方法名将不受影响, 只是变成了一个新的方法而已;
抽象类只能单继承,当一个子类需要实现的功能需要继承多个父类时,就必须使用接口;
类的继承 接口interface/implements