在面向对象(OOP)语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问的接口。而抽象方法就是为了方便继承而引入的,现在来看一下抽象类和抽象方法分别是如何定义以及他们的特点。  什么是抽象方法?我们在类里面定义的只有方法名没有方法体的方法就是抽象方法,所谓没有方法体就是在方法声明的时候没有大括号以及其中的内容,而是直接声明时在方法名后加上分号结束,另外在声明抽象方法时还要加一个关键字"abstract"来修饰。

1、抽象关键字 :abstract  抽象就是无法确切的说明,但又有一定的概念或者名称,在PHP中声明一个抽象类或者方法我们需要使用adstract关键字。

2、抽象方法和抽象类的定义  一个类中至少有一个方法是抽象的,我们称之为抽象类。所以如果定义抽象类首先定义抽象方法。 代码如下:  abstract class class1{

abstract function fun1();  ……

}

1、类中至少有一个抽象方法

2、抽象方法不允许有{ }

3、抽象方法前面必须要加abstract

3、抽象类和方法使用规则 抽象类的几个特点:

1、不能被实例化,只能被继承

2、继承的派生类当中要把所有抽象方法重载才能实例化 关于抽象方法的声明如下: 代码如下: <?php  abstract function fun1();  ?> (PS:PHP Q扣峮:276167802,验证:wk)

什么是抽象类呢?只要一个类里面有一个方法是抽象方法,那么这个类就必须定义为抽象类。

抽象类也要使用关键字"abstract"来修饰,抽象类不能实例化对象,所以抽象方法作为子类方法重载的模板使用的,且要把继承的抽象类里的方法都实现。  关于抽象类以及抽象类的实现举例如下: 代码如下: <?php  abstract class User{  //定义抽象类  abstract protected function getUser(); //定义抽象方法 public function print_content(){ print $this->getUser();  阅读会员限时特惠 7大会员特权立即尝鲜欢迎登录清源教育官网www.tsingyuan.cn 查看更多视频教程  } }  class vipUser extends User{ protected function getUser(){  return "抽象类与抽象方法www.jb51.net"; } }  $user=new vipUser(); //实例化子类  $user->print_content(); //抽象类与抽象方法 ?>

注意:抽象类继承另外一个抽象类时(目的是对该抽象类的扩展),不能重写父类的抽象方法。 在PHP5.1中,抽象类中支持静态抽象方法。下面这个例子,看到静态抽象方法可以声明。实现这个方法时,必须是静态的方法。  代码如下: <?php  abstract class User{ protected static  $sal=0;  static abstract function getSal(); static abstract function setSal($sal);  }  class VipUser extends User{ static function getSal(){ return self::$sal; }  static function setSal($sal){ self::$sal=$sal; } }  VipUser::setSal(100);  echo "you sal is www.tsingyuan.cn" . VipUser::getSal(); ?>    来源:清源教育

interface 和 abstract class 的区别

PHP 5 中类没有多重继承,但可以实现多个接口。这应该是接口的主要用途。这点和Java类似,和C++不同。应该是学java,对多重继承的一种解决方式吧。

代码形式上来说,接口只是一个声明,其方法没有任何实现代码;抽象类的方法既可以没有实现代码,也可以拥有实现代码。

abstract class的更多相关文章

  1. abstract与interface之房祖名张默版

    最近把java基础知识拿出来看看,看到abstract与interface的时候,觉得有点模糊,好像面试官也喜欢问这个问题.我在百度了查了好长时间,觉得讲算比较清楚的是那篇讲 Door,然后想要带个报 ...

  2. [Erlang 0111] Erlang Abstract Format , Part 2

       上回书,我们说到飞天玉虎蒋伯芳来到蜈蚣岭,不是,重来,上回咱们说到可以在Erlang Shell里面手工构造,加载并调用一个模块.在那个demo里面,我把多个Form单独生成出来,最后放在一起做 ...

  3. [Erlang 0110] Erlang Abstract Format , Part 1

    Erlang Abstract Format并不难懂,只是枯燥一点罢了,如果把Abstract Format的文档翻译出来,其实就是Erlang教科书中语法入门的部分. Erlang Abstract ...

  4. C#中Abstract和Virtual的区别

    c# 中 Abstract和Virtual比较容易混淆,都与继承有关,并且涉及override的使用.下面讨论一下二者的区别: 一.Virtual方法(虚方法) virtual 关键字用于在基类中修饰 ...

  5. Java Abstract Class & Interface

    一. 抽象类 1. 抽象类:包含了一个抽象方法的类就是抽象类 2. 抽象方法:声明而未被实现的方法,用关键字abstract声明 3. 抽象类被子类继承,子类(如果不是抽象类)必须重写(overrid ...

  6. java关键字extends(继承)、Supe(父类引用空间)、 This(方法调用者对象)、Instanceof(实例类型-判断对象是否属于某个类)、final(最终)、abstract(抽象) 、interface(接口)0

    java 继承使用关键字extends   继承的作用:减少代码量,优化代码 继承的使用注意点: 1子类不能继承父类的私有变量 2.子类不能继承父类的构造方法 3.子类在调用自己的构造方法时 会默认调 ...

  7. abstract与interface的区别

    abstract的用法: //通过abstract 关键字修饰的类叫抽象类. abstract class Animal { String name; String color; abstract p ...

  8. Delphi之静态方法,虚方法virtual,动态dynamic,抽象abstract,消息

    Delphi之静态方法,虚方法virtual,动态dynamic,抽象abstract,消息 http://www.cnblogs.com/zhwx/archive/2012/08/28/266055 ...

  9. c#中abstract与virtua、overridel的用法

    1.abstract 抽象方法 ,virtual 虚方法 ,override 重载函数 父类A.m() 子类B.m()   abstract的方法父类可以不实现,让子类去重写(重写=overwrite ...

  10. 一张图看懂normal,static,sealed,abstract 的 区别

    +-------------------------+---+--------+--------+--------+----------+ | Class Type | | normal | stat ...

随机推荐

  1. python编程:从入门到实践----第六章>字典

    一.一个简单的字典:alien_0存储外星人的颜色和点数,使用print打印出来 alien_0 = {'color': 'green','points': 5} print(alien_0['col ...

  2. Dijkstra与Floyd算法

    1. Dijkstra算法 1.1 定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点 ...

  3. python format输出

    http://www.cnblogs.com/nulige/p/6115793.html 2.Format 方式 [[fill]align][sign][#][0][width][,][.precis ...

  4. 1. laravel 学习 环境搭建

    1. 项目环境 vagrant + laradock  (因为 自己手动搭建环境太麻烦了 自己弄了一下 感觉还是有些漏洞 所以采用 laradock) 2. Vagrantfile 备注 : box  ...

  5. Serverless 公司的远程团队沟通策略

    本文系译文,Serverless 团队分散在全球各地,本文介绍我们如何管理沟通策略和远程协作. 原作者:FelixDesroches 译者:Aceyclee 首先向不了解我们的人说明一下,Server ...

  6. 【转】我们为什么要使用 Markdown

    目录 从前码字时我们面临着什么困境 标记语言显神威 到底什么是 Markdown 所以为什么我们要使用 Markdown Markdown 简明语法 段落和换行 标题 区块引用 列表 强调 代码标识和 ...

  7. Maven--仓库的分类

    对于 Maven 仓库来说,仓库只分为两类:本地仓库和远程仓库. 当 Maven 根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用:如果本地仓库不存在此构件,或者需要查 ...

  8. fastDFS 文件系统搭建

    1.单机版 https://www.cnblogs.com/chiangchou/p/fastdfs.html#_label3_0 2.集群版

  9. dlib安装踩过的坑

    使用到dlib时遇到了下载错误,不能正常安装 以下是成功安装的记录: 首先打开Anaconda prompt选定一个python环境,安装cmake和boost pip install cmake - ...

  10. selenium自学记录2014.12.26

    现在还是有点病急乱投医的感觉,不知道到底该从何学起,到底怎么学 手头上有的资料是 <零成本实现Web自动化测试-基于Selenium和Bromine> <Selenium测试实践-基 ...