PHP面向对象05_接口与多态
2023-09-14 08:58:00 时间
2)抽象类中可以没有抽象方法
3)任何一个类,如果它里面至少有一个抽象方法,那么这个类就必须被声明为抽象的
4)抽象方法没有方法体,直接分号(;)结束,,使用abstract关键字申明
5)抽象方法不能被实例化,只能被继承(extends);子类必须重载抽象类中所有抽象方法
作用:
1)定义一个规范,具有约束性,强制要求子类定义这些方法(父类中的抽象方法)
注意:
1)继承一个抽象类的时候,子类必须定义父类中的所有抽象方法
2)这些重载的方法的访问控制必须和父类中一样(或者更为宽松)
例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的
3)此外方法的调用方式必须匹配,即类型和所需参数数量必须一致
例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。
示例:
}3、多态的应用
对象的多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为.
这使得同一个属性或行为在父类及其各个子类中具有不同的语义.
例如生活中的USB就可以实现多态功能:插入U盘和鼠标都能正常工作,且完成各自的工作,但内部肯定有一致的规范定义
示例:
3)任何一个类,如果它里面至少有一个抽象方法,那么这个类就必须被声明为抽象的
4)抽象方法没有方法体,直接分号(;)结束,,使用abstract关键字申明
5)抽象方法不能被实例化,只能被继承(extends);子类必须重载抽象类中所有抽象方法
作用:
1)定义一个规范,具有约束性,强制要求子类定义这些方法(父类中的抽象方法)
注意:
1)继承一个抽象类的时候,子类必须定义父类中的所有抽象方法
2)这些重载的方法的访问控制必须和父类中一样(或者更为宽松)
例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的
3)此外方法的调用方式必须匹配,即类型和所需参数数量必须一致
例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。
示例:
abstract class Demo{ prviate $param; public abstract function fun();//定义了一个抽象方法,必须重载使用 public function test(){ //... class SubDemo extends Demo{ public function fun(){ //... }
2、接口(interface)
接口与抽象类很像,都是约束作用,只是接口里面的方法全部是抽象的,且不需要使用abstract申明;
接口使用interface申明
特点:
1)接口使用interface申明
2)接口中的方法全部是抽象的,不需要使用abstract申明
3)接口不能被实例化,必须被引用(implements,同抽象类中的继承)使用
4)子类可以引用多个接口,用逗号(,)隔开
作用:
1)定义一个规范,具有约束性
2)使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容
注意:
1)要实现一个接口,使用implements操作符
2)类中必须实现接口中定义的所有方法,否则会报一个致命错误
3)类可以实现多个接口,用逗号来分隔多个接口的名称
4)实现多个接口时,接口中的方法不能有重名
5)接口也可以继承,通过使用extends操作符
示例:
}3、多态的应用
对象的多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为.
这使得同一个属性或行为在父类及其各个子类中具有不同的语义.
例如生活中的USB就可以实现多态功能:插入U盘和鼠标都能正常工作,且完成各自的工作,但内部肯定有一致的规范定义
示例:
?php //定义一个外围控制接口PCI interface PCI{ //该PCI必须有以下功能 public function init(); public function stop(); //定义主板类 class MainBorad{ public function work(PCI $m){//类型约束,必须传入对象 $m- init(); $m- stop(); //定义声卡引用PCI规范 class SoundCard implements PCI{ public function init(){ echo "声卡正在初始化... br public function stop(){ echo "声卡正在停止... br //定义网卡引用PCI规范 class NetworkCard implements PCI{ public function init(){ echo "网卡正在初始化... br public function stop(){ echo "网卡正在停止... br $sys = new MainBorad(); $sys- work(new SoundCard);//传入声卡对象 $sys- work(new NetworkCard);//传入网卡对象 ?
相关文章
- phpQrCode生成电子名片生成、jqueryQrCard使用以及php识别二维码(基础)
- php new reflectionclass,PHP: ReflectionClass – Manual
- 解决 PHP 设置 open_basedir 与 eAccelerator 冲突问题
- 如何使用php调用api接口,获得返回json字符的指定字段数据
- 文件MySQL更新实现快速PHP文件升级(mysql更新php)
- Linux下如何调试PHP程序(linux调试php)
- 那么流行PHP和MySQL——广泛应用的利器(为什么php和mysql)
- PHPMySQL高效推送双赢之路(php推送mysql)
- Linux系统下 PHP的安装和配置(linux下php的安装)
- WINDOWS服务器安装多套PHP的另类解决方案
- 做一个简单的PHP测试页来测试是否正常
- UbuntuLinux系统下轻松架设nginx+php服务器应用
- 解析PayPal支付接口的PHP开发方式
- 常用的PHP数据库操作方法(MYSQL版)
- php入门学习知识点七PHP函数的基本应用
- linux下为php添加curl扩展的方法
- php图片加中文水印实现代码分享
- php教程插件机制在PHP中实现方案
- php中的PHP_EOL换行符详细解析
- php中使用getimagesize获取图片、flash等文件的尺寸信息实例
- Mac下搭建php开发环境教程
- PHP面向对象程序设计(oop)学习笔记(一)-抽象类、对象接口、instanceof和契约式编程
- php实现获取及设置用户访问页面语言类