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

    1、抽象类(abstract class)

    抽象类不能直接被实例化,必须先继承该抽象类,然后再实例化子类。抽象类中至少要包含一个抽象方法。如果类方法被声明为抽象的,那么其中就不能包括具体功能的实现。继承一个抽象类的时候子类中必须包含抽象类中的所有抽象方法,并且这些方法必须和抽象类中的方法一样或者更宽松,例如抽象类中的抽象方法为protected,那么子类中的方法必须为protected或者public,不能为private。例如:

    //定义抽象类
    abstract class AbstractClass{
        //定义子类中必须包括的方法,而且更宽松
        abstract protected function getValue();
        abstract protected function prefixValue($prefix);
        //普通方法
        public function printOut(){
            return $this->getValue();    
        }
    }
    //子类  继承抽象类
    class ConcreteClass1 extends AbstractClass{
        protected function getValue(){
            return "ConcreteClass1";
        }
        public function prefixValue($prefix){
            return $prefix."ConcreteClass1";
        }
    }
    class ConcreteClass2 extends AbstractClass{
        public function getValue(){
            return "ConcreteClass2";    
        }
        public function prefixValue($prefix){
            return $prefix."ConcreteClass2";
        }
        public function aa(){
            return "aa";    
        }
    }
    $class1 = new ConcreteClass1();
    echo $class1->printOut().'<br />';
    echo $class1->prefixValue('Foo').'<br />';
    
    $class2 = new ConcreteClass2();
    echo $class2->printOut().'<br />';
    echo $class2->getValue().'<br />';
    echo $class2->prefixValue('Bar').'<br />';
    echo $class2->aa();

    2、接口(interface)

    使用接口(interface),你可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

    我们可以通过interface定义一个接口,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

    接口中定义的所有方法必须都是public,这是接口的特性。

    接口的实现使用implements

    interface iTemplate{
        public function setVariable();
        public function getHtml();    
    }
    class Template implements iTemplate{
        public function setVariable(){
            return 'getVariable';    
        }
        public function getHtml(){
            return "getHtml";    
        }
        public function aa(){
            return 'aa';
        }
    }
    $template = new Template();
    echo $template->setVariable();
    echo $template->getHtml();
    echo $template->aa();

    3、接口(interface)与抽象类(abstract)的区别

    抽象类可以有属性、抽象方法、和普通方法,并且方法的保护类型是向下宽松的,可以有构造方法;而接口不可以有普通方法、构造方法和属性,只可以有常量和抽象方法(无方法体保护类型必须是public);

    一个类只可以继承一个抽象方法,但是可以继承多个接口

    If the copyright belongs to the longfei, please indicate the source!!!
  • 相关阅读:
    2020年“3D视觉工坊”视频号最受欢迎视频 Top 10!
    缓存一致性解决方案杂谈
    Mybatis的@Param注解在多参数时候不写,可以正确执行。
    Redis设计与实现之简单动态字符串
    YApi mac上部署
    拖拽方式生成Vue用户界面
    终于可以愉快的撸Java异步代码了!
    Windows 取证之ShellBags
    初识Fastjson漏洞(环境搭建及漏洞复现)
    mongo-express 远程代码执行漏洞分析
  • 原文地址:https://www.cnblogs.com/longfeiPHP/p/4988879.html
Copyright © 2011-2022 走看看