php 多态的理解

php是面向对象的脚本语言,而我们都知道,面向对象的语言具有三大特性:封装,继承,多态。php理应具有这三大特性。

  封装是类的构建过程,php具有;php也具有继承的特性。唯独这个多态,php体现的十分模糊。原因是php是弱类型语言。

  java的多态体现的十分清晰,大体分两类:父类引用指向子类对象;接口引用指向实现接口的类对象。java声明变量时都要给变量设定类型,所以存在什么父类引用和接口引用。而php则没有这点体现,php声明变量不需要给变量设定类型,一个变量可以指向不同的数据类型。所以,php不具有像java一样的多态。

  php不具有像java那种清晰的多态,不是代表php不具有多态性。看下面一个例子:

 1 abstract class animal{
 2     abstract function fun();
 3 }
 4 class cat extends animal{
 5     function fun(){
 6         echo "cat say miaomiao...";
 7     }
 8 }
 9 class dog extends animal{
10     function fun(){
11         echo "dog say wangwang...";
12     }
13 }
14 function work($obj){
15     if($obj instanceof animal){
16         $obj -> fun();
17     }else{
18         echo "no function";
19     }
20 }
21 work(new dog());
22 work(new cat());

  上面通过一个关键字instanceof来判断,变量指向的对象是否是animal类的一个实例,下面new cat(),new dog()都是animal子类的对象,而输出了“dog say wangwang...”和“cat say miaomiao...”,说明子类对象是父类的一个实例,从而达到了java多态的功能。

  上边的类是抽象类,也表明了接口与实现接口的类对象同样可以适用。

  至此,得出php虽然多态体现模糊,但还是具有多态特性的。

时间: 2024-10-26 02:05:37

php 多态的理解的相关文章

Java中的继承、封装、多态的理解

Java中的继承.封装.多态 继承的理解: 1.继承是面向对象的三大特征之一,也是实现代码复用的重要手段.Java的继承具有单继承的特点,每个子类只有一个直接父类. 2.Java的继承通过extends关键字来实现,实现继承的类被称为子类,被继承的类称为父类(有的也称其为基类.超类),父类和子类的关系,是一种一般和特殊的关系.就像是水果和苹果的关系,苹果继承了水果,苹果是水果的子类,水果是苹果的父类,则苹果是一种特殊的水果. 3.Java使用extends作为继承的关键字,extends关键字在

关于java的this、继承、多态的理解

今天主要学习的内容是关于this.继承.多态的理解,并对其作出总结. 1.This 就目前来说,从个人的实验来看,this主要是对于一个类的对象的引用.它出现的位置主要是以它出现的形式决定的. ①.this(参数类型)这是在在构造方法中调用重写的构造方法. ②.作为某个类的对象来调用类中属性或方法.(用在某个类中的成员方法,因为某个类的对象就可以通过.来调用) 2.extends 继承之前已经了解了一些,接下来就是进一步的总结. ①.protected类型的变量是适合子类和父类之间的使用的,即使

多态的理解

今天有开始对多态的理解加深了,基础不好的话看别人的程序很麻烦了,要不断地测试,测试--然后想想为什么,为什么--等过了一两年再看原来的基础代码的时候友开发犯迷糊了,又开始犯迷糊,然后测试测试--回忆一下为什么这样那样--     Father{      视察(){          System.out.println("大家好好工作啊,你们辛苦了!");          System.out.println("基层的每个官员给我贿赂300块大洋,我保你们平安"

理解多态AND理解父类引用指向子类对象

假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,它里面的变量需要占用0.5M内存. 现在通过代码来看看内存的分配情况: Father f = new Father();//系统将分配1M内存. Son s = new Son();//系统将分配1.5M内存. 因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数. 由于s中包含了父类的实例,所以s可以调用父类的方法. Son s1 = s;/

java中对于多态的理解

面向对象: 类:具体的对象抽象而来,可以抽象的表示一类具有相同特征和行为的对象 对象:是由类的实例化而来,对象是类的一个实例 java中关于多态的理解 打个比方 父亲person有行为这个方法,里面包括几个动作:吃饭,睡觉,走路 父亲有三个儿子,三个儿子都继承了父亲的行为方法,所以三个儿子都有吃饭,睡觉,走路这些动作,但是三个儿子又分别有自己的动作--大儿子A会弹吉他,二儿子B会唱歌,三儿子C会打鼓 ... 1.Person person = new A(); 不是父类对象指向子类引用而是父类引

初识多态 简单理解

多态是java 语言三大特征之一(继承.多态.封装    *抽象*) 经过一节课的学习简单的理解是这样,字面意思一个事物多种状态. java字面意思:相同的行为 不同的实现 多态体现  重载 以及子类的方法被从写上. 多态的分类:静态多态已确实,动态多态编未知 具体是的静态不是指用static修饰的,而是指在编译时已经确定的输出或者是效果  体现在重载上面 动态多态是指编译的时候不知道不确定输出结果,只有运行才知道结果   这种情况被称为动态多态  体现在动态捆绑和重写 动态绑定  父类的引用指

面向对象 多态的理解

/** * 面向对象的特征:多态性的使用 * * 1.多态性:可以理解为一个事物的多种形态. * * 2.广义上多态性的体现: * ①方法的重载 和 方法的重写 * ②子类对象的多态性 * * 3.狭义上多态性的体现:子类对象的多态性 * * 4.子类对象的多态性:父类的引用指向子类的对象.(子类的对象赋给父类的引用 * * 5.多态的应用场景:虚拟方法调用:编译时,认为调用的方法是父类的,但是当运行时,实际执行的是子类重写父类的方法 * * 说明:多态中方法的调用:编译看左边,运行看右边! *

JAVA多态的理解

面向对象的三大特性:封装.继承.多态,其中最难理解的就是多态 以下是网上某大神给的一个例子: 1.继承关系 class A {          public String show(D obj){                 return ("A and D");          }             public String show(A obj){                 return ("A and A");          } }

对面向对象中多态的理解

原文:http://www.cnblogs.com/xrq730/p/4820237.html 概述 我们都知道面向对象有四个基本特性:抽象.封装.继承.多态.这四个特性,概括起来可以这么理解,抽象.封装.继承是多态的基础,多态是抽象.封装.继承的表现.多态,是Java中非常重要的一个部分,所以今天来谈一下多态(Polymorphism). 什么是多态 不同类的对象对同一消息作出不同的响应就叫做多态.就像上课铃响了,上体育课的学生跑到操场上站好,上语文课的学生在教室里坐好一样. 多态的作用 简单

java8-3 多态的好处和弊端以及多态的理解

多态的好处: A:提高了代码的维护性(继承保证) B:提高了代码的扩展性(由多态保证) 猫狗案例代码 1 class Animal { 2 public void eat(){ 3 System.out.println("eat"); 4 } 5 6 public void sleep(){ 7 System.out.println("sleep"); 8 } 9 } 10 11 class Dog extends Animal { 12 public void e