php面向对象视频笔记之第四章(接口与多态)
来源:互联网 发布:国际城市三字代码 数据 编辑:程序博客网 时间:2024/05/24 05:03
1、接口的定义与规范
1-1、php与大多数面向对象编程语言一样,不支持多重继承,也就是说每个类只能继承一个父类。
为了解决这个问题,php引入了接口,接口的思想是指定了一个实现了该接口的类必须实现的一系列方法。
1-2、定义:接口(interface)是抽象方法和静态常量(const)定义的集合;在php中,声明接口语法类似声明类,
只不过使用关键词interface,interface 接口名 {...}
1-3、规范:接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量;在接口中的抽象方
法只能是public的,默认也是public权限;abstract和final修饰符也不能修饰接口中的抽象方法。
2、接口的实现与继承
2-1、使用implements来实现一个接口。
class 类名 implements 接口名{ 实现接口的抽象方法... }
2-2、一个类可以实现多个接口。只要使用逗号(,)将多个接口链接起来就可以。
class 类名 implements 接口名1,接口名2,...{ 实现接口的抽象方法... }
2-3、一个类可以继承类并实现接口。
class 子类名 extends 父类名 implements 接口名{ 自己的属性方法;接口抽象方法的具体实现;... }
2-4、一个接口可以继承自另外的接口。注意只有接口和接口之间使用继承关键字extends。
2-5、一个接口继承其它接口时,直接继承父接口的静态常量属性和抽象方法。
2-6、类实现接口必须实现其抽象方法,使用实现关键字implements。
2-7、php中的类是单继承,但是接口很特殊。一个接口可以继承自多个接口。
2-8、抽象类(abstract class)实现接口,可以不实现其中的抽象方法,而将抽象方法的实现交付给具体能被实例化的类去处理 。
3、面向对象编程三大特性之多态
3-1、多态的概念
多态按字面上意思就是“多种形状”。可以理解为多种表现形式,即“一个对外接口(方法),多个内部实现”。
在面向对象的理论中,多态性的一般定义为:同一个操作(函数)作用于不同的类的实例,将产生不同的执行结果。
也即不同类的对象收到相同的信息时,将得到不同的结果。(由继承或接口[建议]来实现)
4、php实现多重继承
4-1、组合方式实现多重继承(表象模拟)
采用的是类内部实现对象引用技术。
4-2、接口方式实现多重继承(完全模拟)
结果如下图:
1-1、php与大多数面向对象编程语言一样,不支持多重继承,也就是说每个类只能继承一个父类。
为了解决这个问题,php引入了接口,接口的思想是指定了一个实现了该接口的类必须实现的一系列方法。
1-2、定义:接口(interface)是抽象方法和静态常量(const)定义的集合;在php中,声明接口语法类似声明类,
只不过使用关键词interface,interface 接口名 {...}
1-3、规范:接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量;在接口中的抽象方
法只能是public的,默认也是public权限;abstract和final修饰符也不能修饰接口中的抽象方法。
2、接口的实现与继承
2-1、使用implements来实现一个接口。
class 类名 implements 接口名{ 实现接口的抽象方法... }
2-2、一个类可以实现多个接口。只要使用逗号(,)将多个接口链接起来就可以。
class 类名 implements 接口名1,接口名2,...{ 实现接口的抽象方法... }
2-3、一个类可以继承类并实现接口。
class 子类名 extends 父类名 implements 接口名{ 自己的属性方法;接口抽象方法的具体实现;... }
2-4、一个接口可以继承自另外的接口。注意只有接口和接口之间使用继承关键字extends。
2-5、一个接口继承其它接口时,直接继承父接口的静态常量属性和抽象方法。
2-6、类实现接口必须实现其抽象方法,使用实现关键字implements。
2-7、php中的类是单继承,但是接口很特殊。一个接口可以继承自多个接口。
2-8、抽象类(abstract class)实现接口,可以不实现其中的抽象方法,而将抽象方法的实现交付给具体能被实例化的类去处理 。
3、面向对象编程三大特性之多态
3-1、多态的概念
多态按字面上意思就是“多种形状”。可以理解为多种表现形式,即“一个对外接口(方法),多个内部实现”。
在面向对象的理论中,多态性的一般定义为:同一个操作(函数)作用于不同的类的实例,将产生不同的执行结果。
也即不同类的对象收到相同的信息时,将得到不同的结果。(由继承或接口[建议]来实现)
4、php实现多重继承
4-1、组合方式实现多重继承(表象模拟)
采用的是类内部实现对象引用技术。
<?phpclass student{ private $name = 'yi'; function getName(){ echo 'student name is '.$this->name,'<br />'; }}class teacher{ private $work_year = 2;//工龄 function getWorkYear(){ echo 'teacher work year is '.$this->work_year,'<br />'; }}//研究生class graduate extends student{ private $teacher; public function __construct(){ $this->teacher = new teacher(); } function getWorkYear(){ $this->teacher->getWorkYear(); }}class test{ static function getName(student $stu){ $stu->getName(); } static function getWorkYear(teacher $teacher){ $teacher->getWorkYear(); }}$yi = new graduate();$yi->getName();$yi->getWorkYear();echo '<hr />';test::getName($yi);test::getWorkYear($yi);//没完全继承
结果如下图:
4-2、接口方式实现多重继承(完全模拟)
通过把类的特征抽象为接口,并通过实现接口的方式让对象有多重身份,自然就可以完全模拟多重继承了。
<?phpinterface user{ function getName();}interface teacher{ function getWorkYear();}class student implements user{ private $name = 'yi'; function getName(){ echo 'student name is '.$this->name,'<br />'; }}class graduateTeacher implements teacher{ private $work_year = 2; function getWorkYear(){ echo 'teacher work year is '.$this->work_year,'<br />'; }}class graduate extends student implements teacher{ private $teacher; public function __construct(){ $this->teacher = new graduateTeacher(); } function getWorkYear(){ $this->teacher->getWorkYear(); }}class test{//user是接口名 static function getName(user $stu){ $stu->getName(); } //teacher是接口名 static function getWorkYear(teacher $teacher){ $teacher->getWorkYear(); }}$yi = new graduate();$yi->getName();$yi->getWorkYear();echo '<hr />';test::getName($yi);test::getWorkYear($yi);
结果如下图:
0 0
- php面向对象视频笔记之第四章(接口与多态)
- php面向对象视频笔记之第六章(反射机制与动态代理)
- php面向对象视频笔记之第二章(面向对象初步)
- php面向对象视频笔记之第三章(面向对象类特性)
- php面向对象视频笔记之第一章(面向对象基础)
- php面向对象视频笔记之第五章(错误和异常处理)
- PHP面向对象之接口
- java面向对象之接口与多态
- php面向对象之——接口(多态实现)
- 黑马程序员------毕老师视频笔记第八天------面向对象(接口多态的应用示例)
- (三)PHP面向对象理论3---接口与反射
- PHP面向对象:接口与抽象方法
- php面向对象之接口概念-133
- php面向对象编程--多态性之接口
- PHP面向对象之接口的实例
- php面向对象之接口教程
- php面向对象之app接口文档
- php面向对象之app接口文档
- 递归解决非布拉茨数列
- 稻香
- Hadoop2.5.2学习02--MR执行环境的类型
- ubuntu opencv3.2安装测试
- hawq4 查询慢
- php面向对象视频笔记之第四章(接口与多态)
- 特殊的数字
- iOS - runtime快速归解档
- 星星树
- 模拟实现Android的Handler
- Ubuntu16.04LTS安装zsh+oh-my-zsh+autojump
- 27.httpClien提交数据
- thinkphp模型$_auto自动完成设置为插入时更新操作也变化的解决办法
- 包含123数字的排序,次数尽量最少