zoukankan      html  css  js  c++  java
  • php 接口和抽象类

    接口

    interface 在接口内定义方法,可不提供具体的代码实现

    作用:提供一个规范,如果我们知道一个类实现了某个接口,那么就知道了可以调用该接口的那些方法,我们只需要知道这些就够了。

              当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,我怎么知道他的某个功能的实现方法是怎么命名的呢,我们定义了一个接口类时,

              它里面的方式是下面的子类必须实现的,

    //声明一个shop接口类,定义了三个方法:买(buy),卖(sell),看(view)
    interface Shop   
    {   
    public function buy($gid);   
    public function sell($gid);   
    public function view($gid);   
    }  

    实现给接口时,必须实现该接口的三个方法

        class BaseShop implements Shop   
        {   
        public function buy($gid)   
        {   
        echo('你购买了ID为 :'.$gid.'的商品');   
        }   
        public function sell($gid)   
        {   
        echo('你卖了ID为 :'.$gid.'的商品');   
        }   
        public function view($gid)   
        {   
        echo('你查看了ID为 :'.$gid.'的商品');   
        }   
        }   
    $a=new BaseShop;
        $a->buy(1);//执行buy方法

    当我们在团队开发时,接口提供的规范,将提高我们的开发效率

     抽象类

    抽象类就把类像的部分抽出来,当你发现你的很多类里面用很多方法你不断的在重复写,那你就可以考虑使用抽象类了

    注意:对于抽象类中的方法,子类不用全部实现,对于抽象方法,子类必须实现,若非抽象方法,之类可以重写覆盖
    <?php
     abstract class BaseShop   
    {   
    public function buy($gid)   
    {   
    echo('你购买了ID为 :'.$gid.'的商品');   
    }   
    public function sell($gid)   
    {   
    echo('你卖了ID为:'.$gid.' 的商品');   
    }   
    abstract  function view();    
    }   
    class BallShop extends BaseShop   
    {   
    var $itme_id = null;   
    public function __construct()   
    {   
    $this->itme_id = 2314;   
    }   
    public function open()   
    {   
    $this->buy($this->itme_id);   
    }  
    public function sell(){
    echo "新的sell方法"; 
    }
    function view(){
        echo "实现抽象方法 ";
    }
    }
    $a=new BallShop;
    $a->open();
    $a->sell();
    $a->view();
    ?>
    //结果:你购买了ID为 :2314的商品 新的sell方法  实现抽象方法
     

    抽象类里实现了这些方法,那么继承它的子类就自动获得了这些方法,子类就做它自己独特的东西,介绍代码的重复,提高复用性。

    接口和抽象类的区别:

    • 对接口的使用方式是通过关键字implements来实现的,而对于抽象类的操作是使用类继承的关键字exotends实现的,使用时要特别注意。
    • 接口没有数据成员,但是抽象类有数据成员,抽象类可以实现数据的封装。
    • 接口没有构造函数,抽象类可以有构造函数。
    • 接口中的方法都是public类型,而抽象类中的方法可以使用private、protected或public来修饰。
    •  一个类可以同时实现多个接口,但是只能实现一个抽象类。
    • 如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建将由一些不相关对象采用的功能,就使用接口。
    • 如果必须从多个来源继承行为,就使用接口。
    • 如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。
  • 相关阅读:
    多重背包
    摘花生
    完全背包问题
    01背包问题
    数字金字塔
    ES6 Object.assign()的用法
    umi---className设置多个样式
    npm 安装yarn
    html引入其他html的几种方式
    react打包去掉map文件
  • 原文地址:https://www.cnblogs.com/224yang/p/7249233.html
Copyright © 2011-2022 走看看