interface 接口 和多态的含义
<?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);
interface 接口 和多态的含义的更多相关文章
- java学习之接口、多态和内部类
接口是一组行为的规范.定义.接口是面向对象编程体系中的思想精髓之一,使用接口可以让我们的程序更加利于变化. 接口的格式: interface 接口名称{ 全局变量: 抽象方法: } 接口中的成员修饰符 ...
- PHP面向对象05_接口与多态
抽象类与接口 2014-9-2 9:14:32 摘要: 1.抽象类(abstract) 2.接口(interface) 3.多态的应用 1.抽象类(abstract) 特点: 1)抽象类使用abstr ...
- C#之interface接口
C#中接口与抽象类很相似,他们都无法实例化自己的对象,但是他们也有很重要的区别.Interface与Abstract class中,类不能多重继承,但是接口可以多重继承. 这段代码表明,声明接口的方法 ...
- C#中的接口实现多态
我们都知道虚方法实现多态,抽象方法实现多态等,我们今天来看看如何使用接口实现多态 1.首先我们先要来了解了解什么是接口,它存在的意识 01.接口就是为了约束方法的格式(参数和返回值类型)而存在的 02 ...
- 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类
---------- android培训.java培训.期待与您交流! ---------- 一.面向对象概述 1.面向对象:是一个很抽象的概念,它相对面向过程而言,是一种程序设计的思想. 2.面向对 ...
- C#面向对象(三)接口实现多态
一.如何用接口实现多态? 1.定义一个接口. using System; using System.Collections.Generic; using System.Linq; using Syst ...
- No2_1.接口继承多态_Java学习笔记_接口
接口.继承与多态 1.继承和多态是面向对象开发语言中的重要一个环节,使用得当,可以将整个程序的架构变得非常有弹性,减少代码冗余: 2.继承:复用定义好的类: 3.多态:可以动态调整对象的调用,降低对象 ...
- Java基础学习笔记八 Java基础语法之接口和多态
接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...
- golang面向对象和interface接口
一. golang面向对象介绍 1.golang也支持面向对象编程,但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.2.golang没有类(class),golang语言的结合体(struc ...
随机推荐
- hdu 1536/ hdu 1944 S-Nim(sg函数)
S-Nim Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- android不太常用的控件
AutoCompleteTextView:是一种与EditText类似的视图(实际上他是EditText的子类),只不过它还在用户输入时自动显示完成建议的列表 <AutoCompleteText ...
- 29 python 并发编程之多线程理论
一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 车间负责把资源整合 ...
- Hat’s Words(字典树的运用)
个人心得:通过这道题,对于树的运用又加深了一点,字典树有着他独特的特点,那个指针的一直转换着实让我好生想半天, 不得不佩服这些发明算法人的大脑. 这题的解决方法还是从网上找到的,还好算法是自己实现得, ...
- 三、python沉淀之路--列表(list)
一.列表提供的一些方法 1.append():在原值最后追加 li = [11,22,33,44,55,] li.append(99) print(li) li.append('中国') print( ...
- 学习动态性能表(14)--v$parameter&v$system_parameter
学习动态性能表 第14篇--V$PARAMETER&V$SYSTEM_PARAMETER 2007.6.11 这两个视图列出的各参数项名称以及参数值.V$PARAMETER显示执行查询的se ...
- 使用POI导出excel基础篇
最近搞了下POI导出Excel,听说很多次,却是第一次搞. 在pom.xml中引入依赖 <dependency> <groupId>org.apache.poi</gro ...
- mysql之 percona-xtrabackup 2.4.7安装(热备工具)
准备:os是centos6.7,提前下载并上传 percona-xtrabackup 安装包,下载网址为: https://www.percona.com/downloads/XtraBackup/L ...
- inotify 同步脚本
#!/bin/bash path1=/home/htoa/tomcat/webapps/ROOT/htoa/ ip=192.168.30.13 /usr/bin/inotifywait -mrq -- ...
- CountDownLatch和cyclicbarrier的使用
CountDownLatch: 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 用给定的计数初始化 CountDownLatch.由于调用了 countDown ...