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

    抽象类:
      1.抽象类不能实例化对象
      2.抽象类存在的目的是为了让子类继承
      3.抽象类的定义和普通类定义一样,只不过前面需要加一个关键字,abstract
      4.抽象类里面一般都要有抽象方法(可以没有),抽象方法是用来让子类实现的,而且子类必须实现,不实现就会报一个致命错误
      5.抽象方法必须public或者protected,要不然子类没法继承实现
      6.抽象方法如果有参数,参数有默认值,那么实现该方法的时候参数和默认值也要有
      7.抽象类可以继承抽象类。子类在实现的时候所有的抽象方法都要实现

    <?php
    abstract class Shengwu
    {
        abstract public function run();
    }
    
    abstract class Person extends Shengwu
    {
    
        // 强制要求子类定义这些方法,且不能定义具体功能 注意没有大括号{}
        abstract public function say($name = php);
    
        // 普通方法(非抽象方法)
        public function eat()
        {
            echo "我吃了一个苹果
    ";
        }
    
    }
    
    class Man extends Person
    {
        public function run()
        {
            echo '我可以奔跑';
        }
    
        public function say($name = php)
        {
            echo '我的名字是' . $name;
        }
    }

    抽象类的使用:举一个简单的例子,数据库有很多种,像mysql,oracle,sqlserver等,对这些数据库的连接是不一样的,但是对数据库的查询,删除,更新等语法都是一样的,所以我们可以把一些公共的方法放到一块,写在一个类中,把这个类定义成抽象类,当然这个类是不能实例化对象的,因为仅依靠抽象类里面的方法是不能完成整个数据库操作的,不同的东西由各个子类进行实现。

    接口:

      1.接口中的方法都是抽象方法,所以abstruct可以省略不写
      2.接口的声明是 interface 接口的实现是 implements
      3.接口中的方法必须是public
      4.接口只能规定方法,不能写属性,(接口中可以写常量,但是不建议写)
      5.一个类可以实现多个接口,接口名称之间用逗号隔开
      6.一个类可以先继承父类,然后再实现接口
      7.接口可以继承接口,但是里面的方法都要实现

    
    
    <?php
    interface Eat
    {
        public function eatMianbao();
    }
    
    interface Run
    {
        function fast();
    }
    
    interface Jump extends Run
    {
        public function go();
    }
    
    class Animal
    {
    
    }
    
    class Person extends Animal implements Eat, Jump
    {
        public function eatMianbao()
        {
            echo '我在吃面包';
        }
    
        public function go()
        {
            echo '我会跳远';
        }
    
        public function fast()
        {
            echo '我跑的很快';
        }
    }

    接口的使用:接口本质是一种规范,在面向接口的开发中,领导会提前把接口写好,然后你来实现这个方法,具体的代码量和代码逻辑,使用接口的人是不需要知道,也不会关心的。

  • 相关阅读:
    LoaRunner性能测试系统学习教程:日志文件分析(8)
    LoaRunner性能测试系统学习教程:MPM相关参数(7)
    LoaRunner性能测试系统学习教程:MPM调优(6)
    响应器
    分页器
    权限组件、频率组件
    drf视图组件、认证组件
    drf序列化组件
    RESTful
    IO操作、PIL使用、Django的admin操作
  • 原文地址:https://www.cnblogs.com/chengzi-he/p/9897559.html
Copyright © 2011-2022 走看看