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!!!
  • 相关阅读:
    如何在linux下使用sudo命令不用输入密码
    QT读写ini配置文件
    dubbo的灰度发布
    dubbo的重试原则
    dubbo的启动时检查
    dubbo的超时处理和配置覆盖
    dubbo配置文件加载顺序
    java基础-泛型的优点
    idea提交多个项目到github的同一个repository
    【掌握】dubbo环境搭建linux
  • 原文地址:https://www.cnblogs.com/longfeiPHP/p/4988879.html
Copyright © 2011-2022 走看看