一.特点:

1、抽象类特点

(1) 用 abstract 来修饰一个类,那么这个类就是抽象类;抽象类绝对不能被实例化,即$abc = new 抽象类名();会报错。
(2) 用abstract 来修饰一个方法,那么该方法就是抽象方法;
(3) 如果类中有一个抽象方法,那么该类就必须定义为抽象类;但反过来,抽象类里并不一定要有抽象方法。另外,抽象类里也可以有普通方法。
(4) 抽象方法不能有方法体。即abstract function abc();------后面不能加大括号{.........}。
(5)、一个类继承了某个抽象类,那么,它必须实现抽象类中所有的抽象方法(除非,它也这些抽象方法声明为抽象的,相当于抽象类继承了抽象类)。
 

2、接口的特点

(1) 接口的方法必须是公开的。
(2) 接口的方法默认是抽象的,所以不在方法名前面加abstract。
(3) 接口可以定义常量,但不能定义成员属性,常量的定义和用法和类中常量一样。
(4) 类可以实现多个接口(用逗号隔开)
(5) 接口也可以继承接口。

二. 区别:

1、对接口的使用是通过关键字implements。对抽象类的使用是通过关键字extends。当然接口也可以通过关键字extends继承。

2、接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。

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

4、接口中的方法默认都是public类型的,而抽象类中的方法可以使用private,protected,public来修饰。

5、一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。

三 .选择:

  • 如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建将由一些不相关对象采用的功能,就使用接口。
  • 如果必须从多个来源继承行为,就使用接口。
  • 如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。

 四.示例:

  1. abstract class people
  2. {
  3. var $name;
  4. abstract function sayName();
  5. }
  6.  
  7. interface mother
  8. {
  9. function beautiful();
  10. }
  11. interface father
  12. {
  13. function clever();
  14. }
  15.  
  16. class son extends people implements mother,father
  17. {
  18. function beautiful()
  19. {
  20. echo "i'm very beautiful!";
  21. }
  22. function clever()
  23. {
  24. echo "i'm very clever!";
  25. }
  26.  
  27. function __construct($name)
  28. {
  29. $this->name = $name;
  30. }
  31. function sayName()
  32. {
  33. echo $this->name;
  34.  
  35. }
  36.  
  37. }
  38.  
  39. $zww = new son("Tom");
  40. $zww->beautiful();
  41. $zww->clever();
  42. $zww->sayName();

  输出结果:i'm very beautiful!i'm very clever!Tom

php中抽象类和接口的特点、区别和选择的更多相关文章

  1. PHP的抽象类、接口类的区别和选择【转载】

    本文转自:http://blog.csdn.net/fanteathy/article/details/7309966 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关 ...

  2. java 中抽象类和接口的五点区别?

    1.一个类可以实现多个接口 ,但却只能继承最多一个抽象类. 2.抽象类可以包含具体的方法 , 接口的所有方法都是抽象的. 3.抽象类可以声明和使用字段 ,接口则不能,但接口可以创建静态的final常量 ...

  3. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  4. C#中抽象类和接口的区别

    原文:C#中抽象类和接口的区别 大家在编程时都容易把抽象类和接口搞混,下面为大家从概念上讲解抽象类和接口的区别: 一.抽象类: 含有abstract修饰符的class即为抽象类,抽象类是特殊的类,只是 ...

  5. 关于JAVA中抽象类和接口的区别辨析

    今天主要整理一下新学习的有关于Java中抽象类和接口的相关知识和个人理解. 1 抽象类 用来描述事物的一般状态和行为,然后在其子类中去实现这些状态和行为.也就是说,抽象类中的方法,需要在子类中进行重写 ...

  6. C#中抽象类与接口的区别

    1.面向接口编程和面向对象编程是什么关系 首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分.或者说,它是面向对象 ...

  7. 谈谈php中抽象类和接口的区别

    php中抽象类和接口的区别 1) 概念 面向对象的三大概念:封装,继承,多态 把属性和方法封装起来就是类.        一个类的属性和方法被另外的类复制就是继承,PHP里面的任何类都可以被继承,被继 ...

  8. PHP中抽象类与接口的区别

    PHP中抽象类与接口的区别 抽象类abstract 概念 定义为抽象的类不能被实例化.任何一个类,如果有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的类. 继承一个抽象类的时候,子类必须定义 ...

  9. java 8中抽象类与接口的异同

    1.java 8中抽象类与接口的异同 相同点: 1)都是抽象类型: 2)都可以有实现方法(以前接口不行): 3)都可以不需要实现类或者继承者去实现所有方法,(以前不行,现在接口中默认方法不需要实现者实 ...

  10. 转载:详细解析Java中抽象类和接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...

随机推荐

  1. SRM 400(1-250pt, 1-500pt)

    DIV1 250pt 题意:给定一个正整数n(n <= 10^18),如果n = p^q,其中p为质数,q > 1,则返回vector<int> ans = {p, q},否则 ...

  2. [置顶] Ubuntu 12.04以上如何恢复GNOME传统界面

    Ubuntu 12.04以上开始使用Unity作为界面系统了,对于一直以来使用GNOME界面的人来说太不适应了,以下是如何在Ubuntu 12.04上恢复GNOME桌面 打开Linux终端上输入以下命 ...

  3. 在eclipse下远程调试hadoop2.0

    在<在eclipse下编译hadoop2.0源码>一文中,我详细介绍了如何在eclipse环境和命令行环境下编译hadoop2.0源代码,并简单介绍了如何构建hadoop环境,这篇文章将着 ...

  4. 缓存淘汰算法 (http://flychao88.iteye.com/blog/1977653)

    1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. ...

  5. [置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

    无论在Window应用程序,还是Web应用程序以对用户友好的方式显示运行时的异常都是很有必要,尤其对于可能有很多不确定因素导致异常的Web应用程序;在传统的Web开发中,处理异常的方式——设计专门一个 ...

  6. 计算任意位数的Pi

    当用程序实现求pi的值时,也许你能够很快写出算法(利用求pi的几个公式),但是由于使用单变量保存结果,限于计算机硬件对变量的表示范围有限,因此,最多只能计算出pi值小数点后十多位.但需要得到一个更大位 ...

  7. [Flexbox] Using order to rearrange flexbox children

    Using the order property we alter the order in which flexbox children appear on the page, without ma ...

  8. C++ 让 Win32 Console Application 程序后台运行

    方法一:(无闪现) 添加   #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRT ...

  9. spring mvc DispatcherServlet详解前传---HttpServletBean类

    从上章里我们已经看到: DispatcherServlet extends FrameworkServlet FrameworkServlet extends HttpServletBean impl ...

  10. android 用代码画虚线边框背景(转)

    1.虚线画效果,可以使用Android中的xml来做. 2.直接上代码: <RelativeLayout android:id="@+id/coupon_popup" and ...