interface 接口 和多态的含义
2024-09-29 15:31:24
<?php
//interface关键字用于定义接口
interface ICanEat{
//接口里面的方法不需要方法的实现
public function eat($food) ;
}
//implemaents关键字用于表示类实现某个接口
class Human implements ICanEat{
//实现了某个接口之后,必须提供接口中定义的方法的具体实现
public function eat($food) {
echo "Human eating ".$food."<br/>";
}
}
class animal implements ICanEat{
//实现了某个接口之后,必须提供接口中定义的方法的具体实现
public function eat($food) {
echo "Animal eating ".$food."<br/>";
}
}
$obj=new Human();
$obj->eat('Apple'); $monkey = new Animal();
$monkey->eat('Banana'); //不能实例化接口
//$eatObj = new ICanEat(); //可以使用instanceof关键字来判断某个对象是否实现了某个接口
var_dump($obj instanceof ICanEat); function checkEat($obj) {
if($obj instanceof ICanEat) {
$obj->eat('food');
}else {
echo "The obj can't eat"."<br/>";
}
} checkEat($obj)."<br/>";
checkEat($monkey); //可以用extends让接口继承接口
interface ICanPee extends ICanEat{
public function pee();
}
//当类实现子接口时,父接口定义的方法也需要在这个类里面具体实现
class Human1 implements ICanPee{
public function pee() {}
public function eat($food){}
}
总结:
某个类实现(implements)了某个接口和继承(extends)了某个类的区别
--实现接口和继承类很类似,但是接口不能直接创建自己的对象
··如果创建了“会吃东西这个对象”,那么具体怎么吃根本不知道
--继承的父类必须有该方法的具体实现,子类可以重写父类的方法,也可以不重写
接口里面的方法是不需要具体实现的,只要定义了方法的名称和参数就可以了,
--具体的实现必须在实现类中定义
--一句话概括:类的方法必须有实现,接口的方法必须为空
多态:
多态:因为接口的方法实现可以有很多种,所以对于接口里面的定义的方法具体实习是多种多样的,这种特性我们称为多态 比如接口A有两个实现B和C,B和C对A里面定义的方法的实现可以是不同的,这种现象就是多态
对于上面接口的例子中
//相同的一行代码,对于传入不同的接口的实现的对象的时候,表现是不同的,这就是多态
checkEat($obj);
checkEat($monkey);
最新文章
- php根据地址的经纬度查询周围的城市例子
- iOS UITableView 移除单元格选中时的高亮状态
- 第13章 Windows内存体系结构
- ThinkPHP之APP_DEBUG给我带来的问题
- c++错误修复 数据库无法打开 无法右击 run outtiime
- Flume NG中的Kafka Channel
- OC KVC总结
- java 常用的包 默认导入的包
- php部分--文件操作
- SVN&#183;最新使用教程总结
- oracle数据库使用心得之与SQL serve数据库的差异
- 用SERVLET进行用户名和密码验证
- ServletContext、ServletRequest和HttpSession的生命周期
- Tableau可视化绘图教程
- tomcat/Java指定加载jar包的路径
- 动态规划法(八)最大子数组问题(maximum subarray problem)
- saltstack自动化运维系列⑤之saltstack的配置管理详解
- hdu 3579 Hello Kiki【中国剩余定理】(模数不要求互素)(模板题)
- 关于“用VS2010的C++导入ADO导入不了,提示无法打开源文件msado15.tlh”的问题
- python语言中的数据类型之元组