zoukankan      html  css  js  c++  java
  • PHP-------抽象和接口

    静态的关键字是:static 

    Class ren 

    {

       Public static $yanse;    //yanse是一个静态的成员

       Static function show() ; // static写在function的前面

    {

             ren::$yanse; //在静态的函数(静态方法)里,去调用静态的成员  类名::调用$yanse;

     

    }

     

    }

     

    在静态的函数(静态方法)里,去调用静态的成员,还有一种方法,是,使用,self:: $yanse;

     

    Class ren 

    {

       Public static $yanse;    //yanse是一个静态的成员

       Static function show() ; // static写在function的前面

    {

            self:: $yanse;  // self 就代表这一个类::调用$yanse;

    }

     

    }

    //Ren具体到某一个类的,可以是人类,也可以是另外一个类

    //Self 写在哪个类里就代表哪个类,Self写在ren里,这和Self就代表人ren

    //Self只能在类里面写,代表哪个类

     

    Class ren 

    {

       Public static $yanse;     

       Static function show() ;  

    {  

        Car::$mingzi;

            self:: $yanse;   

    }

     

    }

    Class car

    {

    Public static $yanse;

    }

    如果用类名的话,不仅可以调用该类里面的,静态的,也可以调用其它类里面的静态的。

    但是,使用self ,就只能调用,该类里面的静态。self写在哪个类里面,就代表哪一个类。

    self 和this 是不一样的:this写在哪个类里,代表哪一个对象。Self写在哪个类里,代表哪一个类。

    记住四句话:

    【1】普通成员是属于对象的

    【2】静态成员是属于类的

    【3】普通成员方法里面可以调用静态成员,也可以调用普通的

    【4】静态方法里面不能调用普通成员

          静态方法里面可以调用静态的成员

     

    之前讲的类可以实例化。

     

                                                  抽象

     

     

    不可以实例化的类称为抽象类。

    抽象类:这个分类太过于抽象,没法把它具体实例化出来。

    抽象的关键字::abstract

    比如,例子:

    <?php

    abstract class DongWu

    {

       public $dong;

       public $jiao;

       function Chi()

    {

    }

    function Shui()

    {

    }

    }

    class Ren extends DongWu //造一个具体的类造一个人类,需要继承动物

    {

     

    }

     

    $r=new Ren();

    var_dump($r);

     

    ?>

     

     

    结果显示:

     

     

    通过继承来实现

     

     

     

    抽象类有什么作用呢???

     

    他不能实例化。抽象类可以用来约束它的子类。

     

    比如说,要造好多动物的类,关于人的,关于猫狗的,造这些类出来,然后这些类呢,都要让他们有某些成员,有某些方法,让它们定义,造这些类但是这些类中,必须都有一个吃的方法,一个睡得方法,不能说造出的类,没有一个吃的方法,我调用吃的它会报错,调用睡的方法它会报错,所以做了一个抽象类,这个抽象类当做所有动物类的父类,然后通过子类中去继承这一个类,来实现相应的功能,相应的去造具体对象。这样的话,造的不管是人类还是狗类还是其他的类,它里面都包含,这两个成员变量,public $dong; public $jiao;  都包含这两个成员方法function Chi(){}  function Shui(){}  这样就可以通过抽象类把它的子类控制住了。

     

    只能继承一个父类,不能同时继承两个。

     

     

     

                                                        接口

     

     

     

    还有一个和抽象类比较像的,他们两的功能可以互换的,叫接口

     

    接口的概念是:极度抽象的类(相对的来说的)

     

    接口也是一个抽象类

     

    接口的关键字是:interface    

     

    使用interface 关键字,就不要加class

     

    Interface  DongWu  //动物的一个接口

     

    {

     

     

     

    }

     

     

    接口是控制子类的

     

     

    比如,电脑USB接口,在做USB接口时,不知道用户将来要往USB接口上插什么东西,可以插鼠标,可以插键盘,可以插优盘,等等一些列的东西多可以往里插。但是在做的时候并不知道用户将要插什么东西,既然不知道,但接口提供出来了,有相应的功能必须要有。插任何的东西,都要有一个方法是读取,还有一个方法是写入

     

     

     

    //接口

     

    Interface USB

     

    {

     

      function read()   //一个方法是读取   读取的功能

     

      {

     

       }

     

      function write()//一个方法是写入

     

    {

     

     

    }

     

      再做USB接口时,考虑到肯定能读,能读插进来的东西,而且能够往里写东西,功能是能写和能读,既然提供了接口,接口就要瞒足这两个条件能读能写,至于怎么读和写是怎么实现的我们不管它

     

     function read(){ 是空的,不写   }    function write(){  是空的,不写 }

     

    是空的没有任何的代码,因为这里面没法写具体代码,不知道怎样去实现它,不知道怎样去实现读和写,但是必须去规定,您只要使用接口,就必须能读能写,针对USB接口有很多厂商。

     

    生产的鼠标的厂商,再生产鼠标时提供了一个鼠标驱动,这个鼠标驱动就是一个类

     

    class  Mouse extends USB //鼠标驱动就是一个类  需要继承接口    继承您的接口来实现里面相应的功能

     

     

     

    接口里面有read方法,有write的方法,鼠标驱动器里,也必须要有一个read和write

     

     

     

    Interface USB

     

    {

     

      function read()   //一个方法是读取   读取的功能

     

      {

     

       }

     

      function write()//一个方法是写入

     

    {

     

     

    }

     

    class  Mouse extends USB

     

    {

     

     

     

    }

     

     

     

    例子代码:

    显示的结果::报错了

     

     

    接口和抽象类的区别是::

     

    抽象类里面的方法,在继承过来之后,可以不用去重写,但是接口必须要重写,就强制性规定,就必须要实现我里面写每一个的方法。

     

    在用的时候有一些区别,区别在于抽象类,继承抽象类可以不用实现里面的方法,但是继承接口就必须要实现接口里的方法。

     

    做了一个鼠标的类,这个鼠标的驱动,它就要实现USB接口里面的两个方法:

     

     

     

    class  Mouse extends USB    //鼠标的驱动

     

    {

     

    function read()

     

    {

     

       echo “插入了鼠标”;

     

    }

     

      function write()

     

    {

     

       echo “通电给鼠标”;

     

     

     

    }

     

    }

     

    $m=new Mouse();//造了一个鼠标

     

    $m -> Read();//读鼠标里的数据,就用Read();方法

     

    $m -> write();//往鼠标里写入数据,就用write();方法

     

    这是写的鼠标的驱动,它实现USB接口,它里面要求,必须有两个方法,一个是读取的一个是写入的方法。插上鼠标他就可以来调用鼠标的驱动,来实现里面的读和写,造了一个鼠标。

     

    例子代码:

     

    Interface USB

     

    {

     

      function read()   //一个方法是读取   读取的功能

     

      {

     

       }

     

      function write()//一个方法是写入

     

    {

     

     

    }

     

    //鼠标的驱动

     

    class Mouse implements USB    //鼠标的驱动

     

    {

     

    function read()

     

    {

     

       echo “插入了鼠标”;

     

    }

     

      function write()

     

    {

     

       echo “通电给鼠标”;

     

     

     

    }

     

    }

     

    //键盘的驱动

     

    class JianPan implements USB    // 键盘的驱动

     

    {

     

    function read()

     

    {

     

       echo “插入了键盘”;

     

    }

     

      function write()

     

    {

     

       echo “通电给键盘”;

     

     

     

    }

     

    }

     

     

     

    $m=new Mouse();//造了一个鼠标

     

    $m -> Read();//读鼠标里的数据,就用Read();方法

     

    $m -> write();//往鼠标里写入数据,就用write();方法

     

     

     

    每一个实现接口的子类,都必须要实现里面Read();和write()的方法,这样可以看出,

     

    定义接口是计算机来定义的,定义好接口之后,要使用USB接口,就必须要瞒足这里面的两个方法Read();和write();必须要实现,如果不实现其中的一个,生产的产品USB就不能使用,所以接口强制性,规定了某一些,类中必须要实现的功能,强制性就是规定必须要实现这一功能。

     

     

     

    接口的关键字是:interface

     

    接口里面的方法没有函数体

     

    实现接口使用的关键字:implements ,不使用extends

     

    实现接口的子类必须要实现接口的每个方法。

     

     

     

     

     

     

  • 相关阅读:
    Distribution(F题)---第八届河南省程序设计大赛
    河南省省赛总结
    Wireless Network--poj2236(并查集)
    River Crossing---河南省第六届大学生程序设计竞赛
    Monkey and Banana---hdu1069(dp)
    Bone Collector--hdu2602(01背包)
    节能--河南省第六届大学生程序设计竞赛
    最舒适的路线--河南省第六届大学生程序设计竞赛
    MPEG2简单码流分析
    H.264简单码流分析
  • 原文地址:https://www.cnblogs.com/yuyu1993/p/5567583.html
Copyright © 2011-2022 走看看