zoukankan      html  css  js  c++  java
  • PHP面向对象程序设计之接口(interface)

    接口(interface)是抽象方法和静态常量定义的集合。接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量。

    为什么说接口是一种特殊的抽象类呢?如果一个抽象类里面的所有的方法都是抽象方法,那么我们就换一种声明方法使用“接口”;也就是说接口里面所有的方法必须都是声明为抽象方法,另外接口里面不能声明变量(但可声明常量constant),而且接口里面所有的成员都是public权限的。所以子类在实现的时候 也一定要使用public权限实限。

    我们先写接口的定义,下面的例子是接口的一个简单写法。

    <?php
    
    interface One{
        //定义一个常量
        const constant = 'constant value';
        //定义抽象方法1
        public function fun1();
        //定义抽象方法
        public function fun2();
    }

     上例中定义了一个接口“one”,里面声明了两个抽象方法“fun1”和”fun2”,因为接口里面所有的方法都是抽象方法,所以在声明抽象方法的时候就不用像抽象类那样使用“abstract”这个关键字了,默认的已经加上这个关键字,另外在接口里边的”public”这个访问权限也可以去掉,因为默认就是public的,因为接口里所有成员都要是公有的,所在对于接口里面的成员我们就不能使用“private”的和“protected”的权限 了,都要用public或是默认的。另外在接口里面我们也声明了一个常量“constant“, 因为在接口里面不能用变量成员,所以我们要使用 const这个关键字声明。

    因为接口是一种特殊的抽象类,里面所有的方法都是抽象方法,所以接口也不能产生实例对象; 它也做为一种规范,所有抽象方法需要子类去实现。

    我们可以使用”extends”关键字让一个接口去继承另一个接口:

    <?php
    
    interface One{
        //定义一个常量
        const constant = 'constant value';
        //定义抽象方法1
        public function fun1();
        //定义抽象方法
        public function fun2();
    }
    
    //使用extends继承另外一个接口
    interface Two extends One{
        public function fun3();
        public function fun4();
    }

    我们定义一接口的子类去实现接口中全部抽象方法使用的关键字是“implements”,而不是我们前面所说的“extends”。

    <?php
    
    interface One{
        //定义一个常量
        const constant = 'constant value';
        //定义抽象方法1
        public function fun1();
        //定义抽象方法
        public function fun2();
    }
    
    class Tree implements One{
        public function fun1()
        {
    
        }
        public function fun2()
        {
            
        }
    }

    我们也可以使用抽象类,去实现接口中的部分抽象方法,但要想实例化对象,这个抽象类还要有子类把它所有的抽象方法都实现才行。

    <?php
    
    interface One{
        //定义一个常量
        const constant = 'constant value';
        //定义抽象方法1
        public function fun1();
        //定义抽象方法
        public function fun2();
    }
    
    abstract class Two implements One{
        public function fun1()
        {
    
        }
        abstract public function fun3();
    }
    
    class Three extends Two{
        public function fun2()
        {
    
        }
        public function fun3()
        {
            
        }
    }

    PHP是单继承的,一个类只能有一父类,但是一个类可以实现多个接口。

    <?php
    
    interface One{
        //定义一个常量
        const constant = 'constant value';
        //定义抽象方法1
        public function fun1();
        //定义抽象方法
        public function fun2();
    }
    
    interface Two{
        public function fun3();
    }
    
    class Three implements One,Two{
        public function fun1(){
    
        }
        public function fun2(){
    
        }
        public function fun3()
        {
            
        }
    }

    PHP中不仅一个类可以实现多个接口,也可以在继承一个类的同时实现多个接口, 一定要先继承类再去实现接口。

    <?php
    
    interface One{
        //定义一个常量
        const constant = 'constant value';
        //定义抽象方法1
        public function fun1();
        //定义抽象方法
        public function fun2();
    }
    
    interface Two{
        public function fun3();
    }
    
    
    class Three{
        public function fun4(){
    
        }
    }
    class Four extends Three implements One,Two{
        public function fun1()
        {
            
        }
        public function fun2()
        {
            
        }
        public function fun3()
        {
            
        }
    }
  • 相关阅读:
    Linux内核RPC请求过程
    二分图
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 文本加密
    Java实现 蓝桥杯 算法提高 文本加密
    Java蓝桥杯 算法提高 九宫格
    Java蓝桥杯 算法提高 九宫格
  • 原文地址:https://www.cnblogs.com/zhouguowei/p/9355104.html
Copyright © 2011-2022 走看看