php抽象类和接口的区别是什么

发布时间:2021-07-12 11:55:59 作者:chen
来源:亿速云 阅读:154

本篇内容主要讲解“php抽象类和接口的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php抽象类和接口的区别是什么”吧!

抽象类

官方描述请查看文档,下面是官方描述的梳理版本:

(抽象类可以没有抽象方法,但是抽象类依然不能被实例化)被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

如:

abstract class  AbstractClass
 {
     // 强制要求子类定义这些方法,且不能定义具体功能 注意没有大括号{}
     abstract protected function  getValue ();
     abstract protected function  prefixValue ( $prefix );

     // 普通方法(非抽象方法)
     public function  printOut () {
        print  $this -> getValue () .  "\n" ;
    }
}
  1. 抽象类可以有成员属性。

  2. 有人问:抽象方法是否可以定义为私有,答案是不可以,因为抽象接口的目的就是为了抽象出类模型用来继承,定义为私有,外部访问不到,偏移了设计目的,会报错。

  3. 抽象类可以实现接口,且可以不实现其中的方法

abstract class Sutdent extends Human
{
    abstract private function study();
}
Fatal error: Abstract function Sutdent::study() cannot be declared private in ...

4.抽象类可以继承抽象类,且不能重写抽象父类的抽象方法。这样的用法,可以理解为对抽象类的扩展。如

abstract class  Human
{
    abstract function eat();
}

abstract class Sutdent extends Human
{
    abstract function study();
    //abstract function eat(); 若重写抽象父类的抽象方法eat()会报错 Fatal error: Can't inherit abstract function Human::eat() (previously declared abstract in Sutdent) in ...
}

接口

1. 接口的定义

interface Play  
{  
    const LEVEL=10;  
    public function PlayLOL();  
    public function PlayFootball();  
}

2. 接口的实现

要实现一个接口,使用 implements 操作符。非抽象类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
补充

 interface Play  
{  
    const LEVEL=10;  
    public function PlayLOL();  
    public function PlayFootball();  
} 

interface Read  
{  
    public function ReadNovel();  
} 
    
abstract class  Human
{
    abstract function eat();
}
//抽象类可以实现接口后不实现其方法,可以继承一个抽象类的同时实现多个接口注意必须要把extends语句写在implements前面,否则会报错
abstract class Sutdent extends Human implements Play,Read
{
    abstract function study();
}

3. 接口的继承

接口可以继承另一个或多个接口,使用extends关键字,多个用 ',' 隔开,但是不能实现另一个接口,当然更不能继承抽象类(继承抽象类报错:Fatal error: PlayGame cannot implement Human - it is not an interface in D:\11\index.php on line 10

interface Play  
{   
    public function PlayFootball();  
}
interface PlayNew  
{   
    public function PlayFootballNew();  
}

interface PlayGame extends play,PlayNew
{  
    public function PlayLOL();  
}

区别:

1.对接口的继承使用implements,抽象类使用extends.

2.接口中不可以声明变量,但可以声明类常量.抽象类中可以声明各种变量

3.接口没有构造函数,抽象类可以有

4.接口中的方法默认为public,抽象类中的方法可以用public,protected,private修饰

5.一个类可以继承多个接口,但只能继承一个抽象类

到此,相信大家对“php抽象类和接口的区别是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. PHP抽象类与接口的区别
  2. php 抽象类,接口的区别

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php

上一篇:C# Unity怎么接入腾讯云实时语音识别

下一篇:php-parser在Aop编程中的使用方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》