php学习十四:抽象,接口和多态
多态为面向对象编程的精华所在,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学习十四:抽象,接口和多态的更多相关文章
- Java程序设计(2021春)——第四章接口与多态笔记与思考
Java程序设计(2021春)--第四章接口与多态笔记与思考 本章概览: 4.1 接口(接口的概念和声明接口.实现接口的语法) 4.2 类型转换 4.3 多态的概念 4.4 多态的应用 4.5 构造方 ...
- Java程序设计(2021春)——第四章接口与多态课后题(选择题+编程题)答案与详解
Java程序设计(2021春)--第四章接口与多态课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第四章接口与多态课后题(选择题+编程题)答案与详解 第四章选择题 4.0 ...
- Java基础学习(四)-- 接口、集合框架、Collection、泛型详解
接口 一.接口的基本概念 关键字为:Interface,在JAVA编程语言中是一个抽象类型,是抽象方法的集合.也是使用.java文件编写. 二.接口声明 命名规范:与类名的命名规范相同,通常情况下 ...
- Java学习笔记:03面向对象-接口_多态
1.类的概念 一堆具有共同的成员变量(属性)和成员方法(功能)对象的集合 2.接口的概念 接口是功能的集合,就是方法的集合 接口中只能定义方法,不能定义普通的成员变量 而且接口中的成员方法,必须是抽象 ...
- 强化学习(十四) Actor-Critic
在强化学习(十三) 策略梯度(Policy Gradient)中,我们讲到了基于策略(Policy Based)的强化学习方法的基本思路,并讨论了蒙特卡罗策略梯度reinforce算法.但是由于该算法 ...
- Java学习笔记——继承、接口、多态
浮点数的运算需要注意的问题: BigDecimal operand1 = new BigDecimal("1.0"); BigDecimal operand2 = new BigD ...
- Scala学习十四——模式匹配和样例类
一.本章要点 match表达式是更好的switch,不会有意外调入下一个分支 如果没有模式能够匹配,会抛出MatchError,可以用case _模式避免 模式可以包含一个随意定义的条件,称做守卫 你 ...
- luogg_java学习_07_抽象类_接口_多态学习总结
这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 抽象 一种专门用来做父类,被继承的. (模板) 格式: abs ...
- 《java JDK7 学习笔记》之接口与多态
1.对于"定义行为"也就是接口,可以使用interface关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public修饰的. 类要操作接口,必须使用imp ...
随机推荐
- iOS 为什么使用xcode8上传app包到appStore无法构建版本
使用xcode8或者application loader上传代码包到AppStore提示上传成功,但是我们在iTunes Connect中的构建版本或者活动中看不到已上传的代码包.这个问题原因是:ap ...
- ANSI文件操作
ANSI文件操作 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之. 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h ...
- 配置TOMCAT 修改默认ROOT路径
本文转载http://xxs673076773.iteye.com/blog/1134805 最合适的) 最直接的办法是,删掉tomcat下原有Root文件夹,将自己的项目更名为Root. 我在$to ...
- POJ 1523 SPF 割点与桥的推断算法-Tarjan
题目链接: POJ1523 题意: 问一个连通的网络中有多少个关节点,这些关节点分别能把网络分成几部分 题解: Tarjan 算法模板题 顺序遍历整个图,能够得到一棵生成树: 树边:可理解为在DFS过 ...
- 使用平台调用(P/Invoke)
使用平台调用 P/Invoke.它的全名叫平台调用(platform invoke).用于调用dll 中实现的非托管的单调(flat)编程接口.被称为使用C或C++ 调用约定(calling conv ...
- Just Cause系列游戏品鉴
没错, 这又是一个游戏点评, 因为实在没地写了, 想起来我还欠JC系列许多售后评价, 就专门写了这篇blog来总结下JC系列的特色, 以及它最新的游戏引擎apex, JC4月初的时候发布的, 虽然和3 ...
- Restful --- 让JSON回归单纯
设计模式才是软件哲学的根本.. 一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓 ...
- Arraylist静态初始化
new ArrayList<String>(Arrays.asList("ab","cd","ef"));
- 关于Cocos2d-x中图集中图片的调用
1.首先在Resources文件夹下要有打包好的图集文件和相同名称的plist文件. shoot.png shoot.plist shoot_background.png shoot_backgrou ...
- Spring 依赖注入(DI)的注解
Spring中想要使用注解进行依赖注入,需要进行如下配置: <beans xmlns="http://www.springframework.org/schema/beans" ...