• PHP中的特殊类,接口类和抽象类(都不能直接实例化)


    接口类不用实例化,需要一一实现接口定义的所有方法。关键字interface implements

    接口interface 是一个规定,给人继承用的东西,有点像抽象类
    在里面定义的方法,却不去实例化,而需要别的类去implements 它,而且必须一一实现接口定义的所有方法,
    实际上接口类说白了,就是一个类的模板,一个类的规定,


    举个例子
    interface Shop
    {
    public function buy($gid);
    public function sell($gid);
    public function view($gid);
    }
    我声明一个shop接口类,定义了三个方法:买(buy),卖(sell),看(view),那么继承此类的所有子类都必须实现这3个方法少一个都不行,
    如果子类没有实现这些话,就无法运行。
    实际上接口类说白了,就是一个类的模板,一个类的规定,
    如果你属于这类,你就必须遵循我的规定,少一个都不行,但是具体你怎么去做,我不管,那是你的事,如:


    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.'的商品');
    }
    }
    ————————————————————————————————————————————————————————————————————————————————————————————————————————

    抽象类&抽象方法  (只能被继承)(关键字 abstract)(继承关键字extends)

    具有抽象方法的类为抽象类,
    抽象方法即为没有内容的空方法,要求子类进行完善内容,
    抽象类不能实例化,只能继承,
    通过extends来实现,抽象类中也可以定义普通方法
     
    父类方法执行方式不确定,但子类还都有这个方法
    例1:如交通工具类:定义抽象方法控制交通工具运行方式,这样每个交通工具如飞机,汽车都要重写父类方法。如果在父类工具类定义该方法(比如在地上走)没有任何意义,因为每个交通工具都要重写(飞机要重写方法,船要重写方法),所以针对你类方法的不确定性,我们需要抽象方法,实现多态。
    例2:定义动物类,每个动物都有叫声方法,但是表面不同,所以要定义为抽象类,让每种动物类去实现功能。
     
    当父类为抽象类时,子类必须重写父类的抽象方法
    抽象类里不一定非要写抽象方法,但有抽象方法的类必须定义为抽象类
    抽象类必须继承使用
    抽象方法不能有主体即{}
    <?php
    abstract class AbstractClass
    {
       // 强制要求子类定义这些方法
        abstract protected function getValue();
        abstract protected function prefixValue($prefix);
     
        // 普通方法(非抽象方法)
        public function printOut() {
            print $this->getValue();
        }
    }
    ________________________________________________________________________________________
















  • 相关阅读:
    打印九九乘法表
    PAT (Basic Level) Practice (中文) 1091 N-自守数 (15分)
    PAT (Basic Level) Practice (中文)1090 危险品装箱 (25分) (单身狗进阶版 使用map+ vector+数组标记)
    PAT (Basic Level) Practice (中文) 1088 三人行 (20分)
    PAT (Basic Level) Practice (中文) 1087 有多少不同的值 (20分)
    PAT (Basic Level) Practice (中文)1086 就不告诉你 (15分)
    PAT (Basic Level) Practice (中文) 1085 PAT单位排行 (25分) (map搜索+set排序+并列进行排行)
    PAT (Basic Level) Practice (中文) 1083 是否存在相等的差 (20分)
    PAT (Basic Level) Practice (中文) 1082 射击比赛 (20分)
    PAT (Basic Level) Practice (中文) 1081 检查密码 (15分)
  • 原文地址:https://www.cnblogs.com/yeyublog/p/5857986.html
Copyright © 2020-2023  润新知