php接口和多态的概念以及简单应用
接口是面向对象中的一个重要特性,也是面向对象开发不可缺少的一个概念,下面简单说一下接口的概念,先看一段简单的代码:
interface ICanEat {
public function eat($food);
}
//Human类实现了ICanEat接口
class Human implements ICanEat {
public function eat($food){
echo "Human eating " . $food . "<br />";
}
}
// Animal类也实现了ICanEat接口
class Animal implements ICanEat {
public function eat($food){
echo "Animal eating " . $food . "\n";
}
}
// 不同的类可以实现同一个接口,定义接口方法的不同实现
$man = new Human();
$man->eat("Apple");
$monkey = new Animal();
$monkey->eat("Banana");
// 实现了某个接口的类必须提供接口中定义的方法
// 不能用接口创建对象,但是能够判断某个对象是否实现了某个接口
//$eatObj = new ICanEat();
var_dump($man instanceof ICanEat); // 判断某个对象是否实现了某个接口
function checkEat($obj){
//定义方法判断对象是否实现某个接口
if($obj instanceof ICanEat){
$obj->eat('Apple');
}else{
echo "The Cant't eat";
}
}
checkEat($man);
checkEat($monkey);
// 接口可以继承接口
interface ICanDrink extends ICanEat {
public function drink();
}
class Human1 implements ICanDrink{
public function pee(){}
public function eat($food){}
}
代码比较乱,重点就是那么一点,首先我们定义一个接口ICanEat,定义的语句是interface ICanEat{},里面可以定义一些方法,这些方法必须是public公有的类型,并且这个方法不用具体的实现,接下来定义了两个类Human和Animal,都实现了ICanEat这个接口,就是都能吃东西,只不过具体吃的方法不太一样,这就是接口的意义所在,即定义一些通用的方法好多类都同时实现这些方法,但是实现的方法不一样,接口的作用就在于此,要注意,接口中定义的所有方法,实现接口的类中必须全部实现,不能实现其中几个,只能全部实现,checkEat方法是判断某个对象是否实现了一个接口。
另外不能用接口创建对象,或者说这种说法是错误的,只能说类实现了接口,对象实现了接口,这是个实现的关系
接口是可以继承接口的,比如ICanDrink可以喝,虽然不是太合适,语句是:interface ICanDrink extends ICanEat{}这里面定义了方法drink,这样就实现了接口的继承
然后定义了类Human1实现了ICanDrink接口,那么这个类必须实现ICanDrink接口以及父接口ICanEat中的所有方法,就是说实现接口必须实现接口中的所有方法以及父接口所有的方法
总之,最核心的地方就是理解接口的作用和意义,它是提供了一些统一的方法去描述不同对象,不同对象都有其具体实现,基本就是这些东西。
至于多态呢,到这里就自然明白了,只要对象实现了某个接口,就直接可以通过对象调用接口的所有方法,接口实现的类方法有很多,这种现象就称为多态,相同的代码传入的对象不一样,所以具体实现方式也不一样,这就是多态的真正含义。
php接口和多态的概念以及简单应用的更多相关文章
- Java基础学习笔记八 Java基础语法之接口和多态
接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...
- Java 基础 接口和多态
接口 接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的 ...
- Java 面向对象之接口、多态
01接口的概念 A:接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成 ...
- 11_Java面向对象_第11天(接口、多态)_讲义
今日内容介绍 1.接口 2.多态 01接口的概念 * A:接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的"类". 接口只描述所应该具备的方法,并没有具 ...
- 11_java之接口和多态
01接口的概念 * A:接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来 ...
- python 接口(抽象) 多态,鸭子类型, 多继承原理(mro)
抽象类与接口类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数 ...
- Java面向对象(接口、多态)
面向对象 今日内容介绍 u 接口 u 多态 第1章 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的 ...
- java基础(11):接口、多态
1. 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成. ...
- Java程序设计(2021春)——第四章接口与多态笔记与思考
Java程序设计(2021春)--第四章接口与多态笔记与思考 本章概览: 4.1 接口(接口的概念和声明接口.实现接口的语法) 4.2 类型转换 4.3 多态的概念 4.4 多态的应用 4.5 构造方 ...
随机推荐
- Java基础--重写(Overriding,覆盖)-重载(Overloading)
多态性: Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义.调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法 Java的方法重写, ...
- hdu1695 莫比乌斯反演
莫比乌斯反演:可参考论文:<POI XIV Stage.1 <Queries>解题报告By Kwc-Oliver> 求莫比乌斯函数mu[i]:(kuangbin模板) http ...
- Server Data Synchronization Via Linux rsync、rsync+inotify Between Load Balance Server
目录 . 远程文件同步的应用场景 . rsync+crontab . rsync+inotify 1. 远程文件同步的应用场景 在负载均衡集群的应用场景中,往往在多台web server的前端有一个提 ...
- 我和NLP的故事(转载)
正值ACL录用结果发布,国内的老师和同学们又是一次大丰收,在这里再次恭喜所有论文被录用的老师和同学们!我人品爆发,也收获了自己硕士阶段的第二篇ACL论文.本来只是想单纯分享下自己中论文的喜悦,但没成想 ...
- Hadoop的datanode无法启动
Hadoop的datanode无法启动 hdfs-site中配置的dfs.data.dir为/usr/local/hadoop/hdfs/data 用bin/hadoop start-all.sh启动 ...
- 快速tab应用
ZCTabNav-master https://github.com/zcsoft/ZCTabNav 层次构架清楚,很适合快速,导入
- ASP.NET WebAPI 03 返回结果
在WebAPI中HttResponseMessage作为消息返回,而在ApiController中我们经常讲四类数据作为返回值,void,object(可序列化),IHttpActionResult, ...
- delphi基本语法
本文参考自<delphi2010语法手册> 1. 工程文件结构 源文件联系着unit单元,delphi主模块源文件格式为.dpr,其他模块为.pas,一个完整程序由一个.dpr和若干.pa ...
- 高效使用git的一些命令
1,添加文件到版本库 添加单个文件: git add filename 添加所有txt文件: git add *.txt 添加所有修改文件: git add ...
- topo排序 + 用邻接表优化后的
输入数据: 4 61 21 32 33 42 44 2 4 61 21 32 33 42 41 2 topo排序为偏序: #include<stdio.h> #include<que ...