PHP 面向对象 final类与final方法


Posted in PHP onMay 05, 2010

final---用于类、方法前。
final类---不可被继承。
final方法---不可被覆盖。
final类不能被继承。
如果我们不希望一个类被继承,我们使用final来修饰这个类。这个类将无法被继承。比如我们设定的Math类,涉及了我们要做的数学计算方法,这些算法也没有必要修改,也没有必要被继承,我们把它设置成final类型。

<? 
//声明一个final类Math 
final class Math{ 
public static $pi = 3.14; public function __toString(){ 
return "这是Math类。"; 
} 
} 
$math = new Math(); 
echo $math; 
//声明类SuperMath 继承自 Math类 
class SuperMath extends Math { 
} 
//执行会出错,final类不能被继承。 
?>

程序运行结果
Fatal error: Class SuperMath may not inherit from final class (Math) in E:\PHPProjects\test.php on line 14

final方法不能被重写
如果不希望类中的某个方法被子类重写,我们可以设置这个方法为final方法,只需要在这个方法前加上final修饰符。

如果这个方法被子类重写,将会出现错误。

<? 
//声明一个final类Math 
class Math{ 
public static $pi = 3.14; 
public function __toString(){ 
return "这是Math类。"; 
} 
public final function max($a,$b){ 
return $a > $b ? $a : $b ; 
} 
} 
//声明类SuperMath 继承自 Math类 
class SuperMath extends Math { 
public final function max($a,$b){} 
} 
//执行会出错,final方法不能被重写。 ?>

程序运行结果

Fatal error: Class SuperMath may not inherit from final class (Math) in E:\PHPProjects\test.php on line 16
PHP 相关文章推荐
PHP初学入门
Nov 19 PHP
一个php Mysql类 可以参考学习熟悉下
Jun 21 PHP
如何使用PHP批量去除文件UTF8 BOM信息
Aug 05 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 PHP
php生成验证码函数
Oct 20 PHP
php安装dblib扩展,连接mssql的具体步骤
Mar 02 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
Jul 03 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
在 Laravel 项目中使用 webpack-encore的方法
Jul 21 PHP
laravel多条件查询方法(and,or嵌套查询)
Oct 09 PHP
PHP实现计算器小功能
Aug 28 PHP
XAMPP升级PHP版本实现步骤解析
Sep 04 PHP
PHP 面向对象 PHP5 中的常量
May 05 #PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 #PHP
一些被忽视的PHP函数(简单整理)
Apr 30 #PHP
php 将字符串按大写字母分隔成字符串数组
Apr 30 #PHP
mayfish 数据入库验证代码
Apr 30 #PHP
在PHP中操作Excel实例代码
Apr 29 #PHP
PHP 图片上传实现代码 带详细注释
Apr 29 #PHP
You might like
PHP 反射机制实现动态代理的代码
2008/10/22 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
2015/12/10 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
基本DOM节点操作
2017/01/17 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
python连接mysql并提交mysql事务示例
2014/03/05 Python
python负载均衡的简单实现方法
2018/02/04 Python
学python安装的软件总结
2019/10/12 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
英国马莎百货印度官网:Marks & Spencer印度
2020/10/08 全球购物
《这儿真好》教学反思
2014/02/22 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
李培根演讲稿
2014/05/22 职场文书
2014年教育工作总结
2014/11/26 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
高中教师个人总结
2015/02/10 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
Python关于OS文件目录处理的实例分享
2021/05/23 Python
python 算法题——快乐数的多种解法
2021/05/27 Python
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL
python中使用redis用法详解
2022/12/24 Redis