多态为面向对象编程的精华所在,js等面向过程的语言虽然可以模拟面向对象,但是毕竟模仿的永远比不上真的,所以了解而且会使用面向对象的多态是必不可少的

在了解多态之前,我们必须要了解接口,但是接口又是在抽象之上建立的.....(哎,废话真多)

一:抽象

* 1.必须以abstract来修饰的方法
* 2.不能有方法体
* 3.可以在抽象类里面写抽象方法和非抽象方法,反过来却不行
* 4.能存放抽象方法的类就是抽象类,
* 5.抽象类的子类必须要用抽象类的抽象方法
//抽象类(父类)
abstract class Human
{
public $name;
//抽象方法
public abstract function speak(); //非抽象方法
public function run(){
echo "我是抽象类里面的非抽象方法";
}
}

  

include_once "Human.class.php";

//抽象类的子类必须要用抽象类的抽象方法
class Workers extends Human
{
function __construct($name)
{
$this->name=$name; } //抽象方法,必须要用
public function speak()
{
echo "父类告诉我必须要用这个吃饭的而抽象方法";
} //非抽象方法,可以不用
public function run(){
echo "我是抽象类里面的非抽象方法{$this->name}";
}
}

  

二.接口

* 1.接口中不需要使用abstract关键字来修饰方法,默认的就是抽象方法,所有方法都是抽象方法,没有非抽象方法
* 2.接口中所有的属性都必须是常量,但很少在接口中使用属性;
* 3.关键字interface来声明一个接口
* 4.实现接口(无法继承),关键字implements,实现多个接口的时候,在后面加逗号进行添加
//定义一个接口

interface Animal{

    //常量成员
const legs=10; //抽象方法
public function play(); }

  

include_once "Animal.interface.php";
//实现多个接口的时候,在后面加“,”进行添加
class Dog implements Animal
{
public function play(){
echo "狗会跑";
} }

  

三.多态

以上面的接口为例来做多态,我们在实现接口的时候,只写了一个dog类,那我想写一个cat类,它会的play行为是上树,这个时候如果我们不用多态的话,是不是得每次都实例化一次,然后再挨个挨个的实现接口,这就显的麻烦了,这个时候用多态就显得简洁一些

好,那么我在定义一个cat类来实现接口

include_once "Animal.interface.php";
class Car implements Animal
{ public function play(){
echo "猫会抓老鼠";
}
}

  

此时,我如果想用多态的话,需要再定义一个类来实现play这一行为,我把它定义为Boy类

include_once "Dog.class.php";
include_once "Car.class.php";
include_once "Animal.interface.php";
class Boy{ public function makeAnimalPlay(Animal $animal){ $animal->play(); } }

  

主函数main里的代码是这个样子的

function __autoload($name){
$path = $name.".class.php";
include_once $path;
} $dog = new Dog(); $car = new Cat(); $boy = new Boy(); $boy->makeAnimalPlay($dog); $boy->makeAnimalPlay($cat);

  这个时候我们就完成了一个简单的多态了

												

php学习十四:抽象,接口和多态的更多相关文章

  1. Java程序设计(2021春)——第四章接口与多态笔记与思考

    Java程序设计(2021春)--第四章接口与多态笔记与思考 本章概览: 4.1 接口(接口的概念和声明接口.实现接口的语法) 4.2 类型转换 4.3 多态的概念 4.4 多态的应用 4.5 构造方 ...

  2. Java程序设计(2021春)——第四章接口与多态课后题(选择题+编程题)答案与详解

    Java程序设计(2021春)--第四章接口与多态课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第四章接口与多态课后题(选择题+编程题)答案与详解 第四章选择题 4.0 ...

  3. Java基础学习(四)-- 接口、集合框架、Collection、泛型详解

    接口 一.接口的基本概念 关键字为:Interface,在JAVA编程语言中是一个抽象类型,是抽象方法的集合.也是使用.java文件编写.   二.接口声明 命名规范:与类名的命名规范相同,通常情况下 ...

  4. Java学习笔记:03面向对象-接口_多态

    1.类的概念 一堆具有共同的成员变量(属性)和成员方法(功能)对象的集合 2.接口的概念 接口是功能的集合,就是方法的集合 接口中只能定义方法,不能定义普通的成员变量 而且接口中的成员方法,必须是抽象 ...

  5. 强化学习(十四) Actor-Critic

    在强化学习(十三) 策略梯度(Policy Gradient)中,我们讲到了基于策略(Policy Based)的强化学习方法的基本思路,并讨论了蒙特卡罗策略梯度reinforce算法.但是由于该算法 ...

  6. Java学习笔记——继承、接口、多态

    浮点数的运算需要注意的问题: BigDecimal operand1 = new BigDecimal("1.0"); BigDecimal operand2 = new BigD ...

  7. Scala学习十四——模式匹配和样例类

    一.本章要点 match表达式是更好的switch,不会有意外调入下一个分支 如果没有模式能够匹配,会抛出MatchError,可以用case _模式避免 模式可以包含一个随意定义的条件,称做守卫 你 ...

  8. luogg_java学习_07_抽象类_接口_多态学习总结

    这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 抽象 一种专门用来做父类,被继承的. (模板) 格式: abs ...

  9. 《java JDK7 学习笔记》之接口与多态

    1.对于"定义行为"也就是接口,可以使用interface关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public修饰的. 类要操作接口,必须使用imp ...

随机推荐

  1. [ubuntu]E: The package firmware-upgrade needs to be reinstalled, but I can't find an archive for it.

    解决办法把firmware-upgrade卸载 sudo dpkg --remove --force-all firmware-upgrade 然后 sudo apt-get update 即可

  2. Quartz 一个JOB 配置多个Trigger时注意的问题

    public class SimpleExample { public void run() throws Exception { Logger log = LoggerFactory.getLogg ...

  3. sysctl -P 报错解决办法

    sysctl -P 报错解决办法问题症状修改 linux 内核文件 #vi /etc/sysctl.conf后执行sysctl  -P 报错error: "net.bridge.bridge ...

  4. Web API(三):创建Web API项目

    在本篇文章中将讲解如何使用Visual Studio创建一个新的ASP.NET Web API项目. 在Visual Studio中有两种方式用于创建Web API项目: 1.创建带MVC的Web A ...

  5. CSS圆角框,圆角提示框

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Python 随机数,break,continue

    #-*- coding:utf-8 -*- #导入模块 import random #打印10以内的随机数 num = 5 while num > 0: #random.randint(0,10 ...

  7. UML总结---UML中的事物和关系

    UML中的事物 名称 说明 图形 类 相同属性方法的集合 接口 类或组件提供的,可以完成特定功能的一组操作的集合 协作 合作的动作 用例 系统的一个功能 节点 代表可计算的资源 活动类 有多个线程的类 ...

  8. 【F12】网络面板

    使用网络面板了解请求和下载的资源文件并优化网页加载性能 (1)网络面板基础 测量资源加载时间 使用 Network 面板测量您的网站网络性能. Network 面板记录页面上每个网络操作的相关信息,包 ...

  9. 用python批量执行VBA代码

    先说下背景环境 1. 公司需要问卷调查,有两份问卷, 1)是spss问卷,2)是excel问卷.spss问卷数据不全,但有各种标签, excel呢, 生成的数据直接把选项变成了值 2. 现在需要把ex ...

  10. samtools faidx 命令处理fasta序列

    samtools faidx 能够对fasta 序列建立一个后缀为.fai 的文件,根据这个.fai 文件和原始的fastsa文件, 能够快速的提取任意区域的序列 用法: samtools faidx ...