php 接口类interface和抽象类abstract的区别

原创 木鱼  2017-08-15 15:26  阅读 145 次

什么是abstract抽象类

1、抽象类的关键字是abstract。

2、抽象类不能直接被实例化。

3、抽象类中只定义(或部分实现)子类需要的方法。

4、子类可以使用关键字extends继承它并且通过实现其中的抽象方法,使抽象类具体化。

5、抽象类的每个子类都必须实现抽象类中的所有抽象方法,或者把未实现的方法也声明成抽象方法,且子类本身也应该声明成抽象类。

6、子类实现的抽象方法访问控制不能比抽象类更加严格(private、protected、public)。

7、抽象类方法的访问控制不能是private。

<?php 

abstract class Hello  
{  
    // 抽象类中可以定义变量
    protected $value1 = 0;  
    private $value2 = 1;  
    public $value3 = 2; 

    // 也可以定义非抽象方法
    public function helloWorld()  
    {  
        echo "hello,world".PHP_EOL;  
    }  

    /** 
     * 抽象方法在抽象类中不能被实现,也就是没有函数体“{some codes}”。 
     */  
    abstract public function func1();  
    abstract protected function func2();  
}

什么是interface接口类

1、接口类的关键字是interface。

2、接口类不能直接被实例化。

3、子类可以使用关键字implements来实现某个接口。

4、任何实现接口的类都要实现接口中所定义的所有方法,否则该类必须恒明为abstract。

5、接口类不能定义变量。

6、接口类的方法不能包含实体内容。

7、接口类方法的访问控制只能是public。

8、接口类不能声明变量,可以声明常量和方法。 但是不推荐声明常量,这违背了接口的设计理念。

<?php 

interface Hello 
{
    const ERROR_CODE = 500;
    
    public function func1();
    public function func2();
}

实现接口

<?php

class World implements Hello {}

有方法没有被实现

<?php

abstract World implements Hello {}

继承父类并且实现多个接口

<?php

class World extends A implements B, C, D {}

区别

抽象类和接口类的特征已经总结了,只剩下找不同了。

 

1、抽象类可以实现某个方法的功能,接口只能定义这个功能。

2、抽象类可以定义变量,接口类不能定义变量。

3、抽象类可以使用public和protected,接口类只能使用public。

4、接口类可以同时实现多个。

5、定义抽象类的关键字是abstract;定义接口类的关键字是interface。

6、抽象类使用extends关键字继承实现;接口类用implements关键字实现。

本文地址:https://www.m5yu.com/php-interface-abstract.html
关注我们:请关注一下我们的微信公众号:扫描二维码,公众号:木鱼博客
版权声明:本文为原创文章,版权归 木鱼 所有,欢迎分享本文,转载请保留出处!

发表评论