php面向对象全攻略 (十二) 抽象方法和抽象类


Posted in PHP onSeptember 30, 2009

抽象方法和抽象类
在OOP 语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法做为
外部代码访问其的接口。而抽象方法就是为了方便继承而引入的,我们先来看一下抽象类和
抽象方法的定义再说明它的用途。
什么是抽象方法?我们在类里面定义的没有方法体的方法就是抽象方法,所谓的没有方
法体指的是,在方法声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后
加上分号结束,另外在声明抽象方法时还要加一个关键字“abstract”来修饰;
例如:
abstract function fun1();
abstract function fun2();
上例是就是“abstract”修饰的没有方法体的抽象方法“fun1()”和“fun2()”,不要忘记
抽象方法后面还要有一个分号;那么什么是抽象类呢?只要一个类里面有一个方法是抽象方
法,那么这个类就要定义为抽象类,抽象类也要使用“abstract”关键字来修饰;在抽象类里
面可以有不是抽象的方法和成员属性,但只要有一个方法是抽象的方法,这个类就必须声明
为抽象类,使用“abstract”来修饰。
例如:
代码片段

abstract class Demo{ 
var $test; 
abstract function fun1(); 
abstract function fun2(); 
function fun3(){ 
… . 
} 
}

上例中定义了一个抽象类“Demo”使用了“abstract”来修饰,在这个类里面定义了一
个成员属性“$test”,和两个抽象方法“fun1”和“fun2”还有一个非抽象的方法fun3();那
么抽象类我们怎么使用呢?最重要的一点就是抽象类不能产生实例对象,所以也不能直接使
用,前面我们多次提到过类不能直接使用,我们使用的是通过类实例化出来的对象,那么抽
象类不能产生实例对象我们声明抽象类有什么用呢?我们是将抽象方法是做为子类重载的模
板使用的,定义抽象类就相当于定义了一种规范,这种规范要求子类去遵守,子类继函抽象
类之后,把抽象类里面的抽象方法按照子类的需要实现。子类必须把父类中的抽象方法全部
都实现,否则子类中还存在抽象方法,那么子类还是抽象类,还是不能实例化对;为什么我
们非要从抽象类中继承呢?因为有的时候我们要实现一些功能就必须从抽象类中继承,否则
这些功能你就实现不了,如果继承了抽象类,就要实现类其中的抽象方法;
代码片段
<? 
abstract class Demo{ 
var $test; 
abstract function fun1(); 
abstract function fun2(); 
function fun3(){ 
… . 
} 
} 
$demo=new Demo(); //抽象类为能产生实例对象,所以这样做是错的,实例化对象交给子类 
class Test extends Demo{ 
function fun1(){ 
… 
} 
function fun2(){ 
… 
} 
} 
$test=new Test(); //子类可以实例化对象,因为实现了父类中所有抽象方法 
?>
PHP 相关文章推荐
粗略计算在线时间,bug:ip相同
Dec 09 PHP
php array_flip() 删除数组重复元素
Jan 14 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
Jun 04 PHP
PHP用SAX解析XML的实现代码与问题分析
Aug 22 PHP
使用配置类定义Codeigniter全局变量
Jun 12 PHP
PHP中使用虚代理实现延迟加载技术
Nov 05 PHP
php实现的树形结构数据存取类实例
Nov 29 PHP
php输出全球各个时区列表的方法
Mar 31 PHP
php获取Google机器人访问足迹的方法
Apr 15 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
Sep 30 PHP
PHP常用函数总结(180多个)
Dec 25 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
Mar 02 PHP
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
Sep 30 #PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 #PHP
php面向对象全攻略 (九)访问类型
Sep 30 #PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 #PHP
php面向对象全攻略 (七) 继承性
Sep 30 #PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
Sep 30 #PHP
php面向对象全攻略 (五) 封装性
Sep 30 #PHP
You might like
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
JavaScript 基本概念
2015/01/20 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
Bootstrap实现导航栏的2种方式
2016/11/28 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
jQuery操作css样式
2017/05/15 jQuery
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
js实现轮播图效果 z-index实现轮播图
2020/01/17 Javascript
js实现全选和全不选
2020/07/28 Javascript
Python标准库os.path包、glob包使用实例
2014/11/25 Python
python抓取百度首页的方法
2015/05/19 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
2019/08/17 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
Python实现封装打包自己写的代码,被python import
2020/07/12 Python
python基于win32api实现键盘输入
2020/12/09 Python
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
临时用工协议书范本
2014/10/29 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
浅谈如何提高PHP代码的质量
2021/05/28 PHP
python_tkinter事件类型详情
2022/03/20 Python
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS
windows server2008 开启端口的实现方法
2022/06/25 Servers