PHP抽象类与接口的区别详解

对于面向对象开发,抽象类与接口这两个东西是比较难理解的;就算是对于有一定经验的程序员来说也如此。下面根据自己的理解来讲述一下这两个东西,如有什么不对的,还望不吝赐教。

抽象类:是基于类来说,其本身就是类,只是一种特殊的类,不能直接实例,可以在类里定义方法,属性。类似于模版,规范后让子类实现详细功能。

接口:主要基于方法的规范,有点像抽象类里的抽象方法,只是其相对于抽象方法来说,更加独立。可让某个类通过组合多个方法来形成新的类。

抽象类与接口的相同点:

1、都是用于声明某一种事物,规范名称、参数,形成模块,未有详细的实现细节。

2、都是通过类来实现相关的细节工作

3、语法上,抽象类的抽象方法与接口一样,不能有方法体,即{}符号

4、都可以用继承,接口可以继承接口形成新的接口,抽象类可以继承抽象类从而形成新的抽象类

抽象类与接口的不同点:

1、抽象类可以有属性、普通方法、抽象方法,但接口不能有属性、普通方法、可以有常量

2、抽象类内未必有抽象方法,但接口内一定会有“抽象”方法

3、语法上有不同

4、抽象类用abstract关键字在类前声明,且有class声明为类,接口是用interface来声明,但不能用class来声明,因为接口不是类。

5、抽象类的抽象方法一定要用abstract来声明,而接口则不需要

6、抽象类是用extends关键字让子类继承父类后,在子类实现详细的抽象方法。而接口则是用implements让普通类在类里实现接口的详细方法,且接口可以一次性实现多个方法,用逗号分开各个接口就可

各自的特点:

抽象类内未必有抽象方法,但有抽象方法的类,则必是抽象类

抽象类内,即便全是具体方法,也不能够实例化,只要新建类来继承后,实例继承类才可以

接口可以让一个类一次性实现多个不同的方法

接口本身就是抽象的,但注意不是抽象类,因为接口不是类,只是其方法是抽象的。所以,其也是抽象的

应用与结合:

以下的代码是基于自己的思考,未在实际开发中应用,只是这种写法有点奇特。让抽象与接口结合起来。

一、抽象类与接口的结合

<?php
/*
写此程序源于自己的猜测,想在抽象类里实现某一接口。
*/
interface work{
  public function say();
}
abstract class a implements work{
  public function showlove(){
    echo 'love you<br />';
  }
}
class b extends a{
  public function say(){
    echo 'hello, i m in b';
  }
}
$k=new b();
$k->say();
/*
以上程序能正常执行
普通类implements接口后,就变成了抽象类了,这就好像是直接给抽象类增加了一个抽象方法。
*/

二、接口与继承的结合

父类是普通类,子类继承后,同时在子类里实现接口。

疑问:这样的做法是否有意义,在实际开发中是否有这样的应用?

<?php
interface kk{
  public function say();
}
class a {
  public function show(){
    echo '我是父类<br />';
  }
}
class b extends a implements kk{
  public function say(){
    echo '我是继承A类,同时实现say接口的<br />';
  }
}
$b=new b();
$b->show();//我是父类
$b->say();//我是继承A类,同时实现say接口的

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • PHP中抽象类、接口的区别与选择分析

    本文实例分析了PHP中抽象类.接口的区别与选择.分享给大家供大家参考,具体如下: 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过关键字extends继承. 2.接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量.抽象类中可以声明各种类型成员变量,实现数据的封装.(另JAVA接口中的成员变量都要声明为public static final类型) <?php abstract class Father { funct

  • PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述

    复制代码 代码如下: <?php /* 边学边做的,为方便自己翻阅而发布,更为得到高人指点而发布,欢迎高手指点...... [提示]本例通过测试无误 [情景设计] 模拟计算机主板IDE接口,比如:主板可以存取的储存器常常有光驱.硬盘.闪存等等, 为了方便,有必要对这些不同的储存器设定同一的接口. 本例还假设一种前所未有的.存取方式与众不同的外星储存器也要加到主板上进行存取, 于是需要采用耦合的设计模式. [本例主要讲述] 1.通过接口.抽象类.一般类继承三种方式达到所谓的"接口"

  • PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)

    本文实例讲述了PHP面向对象的特性.分享给大家供大家参考,具体如下: Demo1.php <?php header('Content-Type:text/html; charset=utf-8;'); //创建一个电脑类 class Computer { //什么叫做类内,就是创建类的花括号内的范围叫做类内,其他地方则类外. //public 是对字段的公有化,这个字段类外即可访问,赋值和取值 public $_name = '联想'; } $computer = new Computer();

  • php接口和抽象类使用示例详解

    一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 .抽象类不能被直接实例化.抽象类中只定义(或部分实现)子类需要的方法.子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化. 3 .如果子类需要实例化,前提是它实现了抽象类中的所有抽象方法.如果子类没有全部实现抽象类中的所有抽象方法,那么该子类也是一个抽象类,必须在 class

  • PHP OPP机制和模式简介(抽象类、接口和契约式编程)

    1.抽象类 抽象类机制中总是要定义一个公共的基类,而将特定的细节留给继承者来实现.通过抽象概念,可以在开发项目中创建扩展性很好的架构.任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的.被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现.在类的声明中使用 abstract 修饰符就可以将某个类声明为抽象的. 1.1方法原型(prototype) 是指方法的定义中剔除了方法体之后的签名.它包括存取级别.函数关键字.函数名称和参数.他不包含({

  • 深入分析php中接口与抽象类的区别

    接口和抽象类真的很难区分开,引文他们很相似,方法都没有定义逻辑,都是供子类是想或继承的.区分二者只要记住一句话:接口是规范,类是实现.接口的目的是定义一个规范,大家都遵守这个规范. 也就是说,从目的上可以很清楚地区分接口和抽象类.那么还是有疑问,既然有了借口,那么为什么还必须有抽象类呢? 加入我们要定义一个名为Animal的类,该类有两个子集Dog和Cattle,二者都有两个方法:run()方法和speak()方法. 假定Dog和Cattle的"跑(run)"是相同的,因此run()方

  • PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)

    本文实例讲述了PHP面向对象程序设计高级特性.分享给大家供大家参考,具体如下: 静态属性 <?php class StaticExample { static public $aNum = 0; // 静态共有属性 static public function sayHello() { // 静态共有方法 print "hello"; } } print StaticExample::$aNum; StaticExample::sayHello(); ?> 输出:0   

  • 浅析php中抽象类和接口的概念以及区别

    复制代码 代码如下: //抽象类的定义:abstract class ku{  //定义一个抽象类  abstract function kx();  ......}function aa extends ku{  //实现抽象类的方法  function kx(){    echo 'sdsf';  }}//使用方法$aa=new aa;$aa->kx();//1.定义一些方法,子类必须完全实现这个抽象中所有的方法//2.不能从抽象类创建对象,它的意义在于被扩展//3.抽象类通常具有抽象方法,

  • php 接口类与抽象类的实际作用

    1.php 接口类:interface 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候php接口类就起到作用了,当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的,比如 : 复制代码 代码如下: interface Shop { public function buy($gid); public function sell($gid); public function view($g

  • php抽象类和接口知识点整理总结

    本文实例总结了php抽象类和接口相关知识点.分享给大家供大家参考,具体如下: 抽象类(一种抽象的类) 一.什么是抽象方法? 定义:一个方法如果没有方法体(一个方法,不使用{},直接使用分号结束的方法,才是没有方法体的方法),则这个方法就是抽象方法. class Person{ abstract function say(); 没有方法体的 .使用abstract 关键字修饰 abstract function say(){ 这个不是.有方法体{}, }; } 总结 1.声明一个方法不使用{},而

  • PHP中抽象类,接口功能、定义方法示例

    本文实例讲述了PHP中抽象类,接口功能.定义方法.分享给大家供大家参考,具体如下: 这里先介绍接口,因为在我最近看的好几本php工具书中都没有提到抽象类. 本人也觉得,在理解了接口后抽象类也非常好理解. 例子代码随便写了一下.例子代码是很ok的,测试过了不会报错,懒得看代码的筒靴们看文字一样.栗子举的不好. 代码测试环境:php5.3.29 接口(interface): 接口就是为抽象而生的,相当于一个约定或规范,方便框架搭建,代码分工. 它里面指定了抽象方法的名称和参数和成员常量,但不能包含任

随机推荐