PHP和JAVA中的重载(overload)和覆盖(override) 介绍


Posted in PHP onMarch 01, 2012

重载:同一个类中,函数名一样,返回值或者参数类型,个数不一样的叫做重载。
覆盖:同名函数,同返回值类型,同参数的叫做覆盖。指的是子类对父类中方法的覆盖。
PHP不支持方法和操作符重载。JAVA不支持操作符的重载(但是“+”实际上是一种操作符重载)。

<?php 
Class Father { 
public function fmeth1() { 
echo "fmeth1()...<br>"; 
} 
//public function fmeth1($str1) { 
// echo "fmeth1() with $str1...<br>"; 
//} 
} 
Class Son extends Father { 
public function fmeth1() { 
echo "fmeth1() in son...<br>"; 
} 
} 
$s=new Son(); 
$s->fmeth1(); 
?>

其中父类中的fmeth1方法是不能重载的。

java中(overload)重载与(override)覆盖的事例小解

在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。但在Java编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的返还类型和抛出的异常是否相同。

QUESTION NO: 3

class A { 
protected int method1(int a, int b) { return 0; } 
}

Which two are valid in a class that extends class A? (Choose two)
A. public int method1(int a, int b) { return 0; }
B. private int method1(int a, int b) { return 0; }
C. private int method1(int a, long b) { return 0; }
D. public short method1(int a, int b) { return 0; }
E. static protected int method1(int a, int b) { return 0; }

310-035中的题目,标准答案是A,C

A是override,access从protected--->public变宽了,因此是正确的。
B,D也是override,B从protected--->private变窄了,D的返回类型变了,所以都错误。
C是overload,access的宽窄和返回类型都无所谓,所以是正确的。
E是override,但是增加了static,因为static method cannot hide the instance method from super class.因此是错误的。
所以选AC。
子类继承父类并且覆盖父类方法的叫override --重写,覆写,覆盖
子类有多个相同方法名称,但是参数不同,叫overload - 重(zhong)载,过载

重载是:
当多个方法具有相同的名字而含有不同的参数时产生
那么对参数不同的调用,实际调用不同的方法
也可以理解为实际上有两个方法,名字同,参数不同!

覆盖(OVERWRITE)注意

不能降低原方法的"可见度

返回类型不同都不能构成方法的覆盖

重载(OVERLOAD)注意
只有参数不同才能构成重载

PHP 相关文章推荐
php checkbox复选框值的获取与checkbox默认值输出方法
May 15 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
Aug 15 PHP
ThinkPHP 404页面的设置方法
Jan 14 PHP
Laravel 5 学习笔记
Mar 06 PHP
UTF-8正则表达式如何匹配汉字
Aug 03 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
Mar 25 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
Sep 22 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
Mar 12 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
Oct 21 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
Mar 04 PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 #PHP
PHP设计模式之装饰者模式
Feb 29 #PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 #PHP
mysql总结之explain
Feb 27 #PHP
php&amp;mysql 日期操作小记
Feb 27 #PHP
MySQL时间字段究竟使用INT还是DateTime的说明
Feb 27 #PHP
php explode函数实例代码
Feb 27 #PHP
You might like
在mysql数据库原有字段后增加新内容
2009/11/26 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
php实现微信分享朋友链接功能
2019/02/18 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
2013/04/17 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
2015/06/26 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
js实现一键复制功能
2017/03/16 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python自动化测试之连接几组测试包实例
2014/09/28 Python
python集合类型用法分析
2015/04/08 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
VSCode 自定义html5模板的实现
2019/12/05 HTML / CSS
为什么要做架构设计
2015/07/08 面试题
大学本科毕业生的自我鉴定范文
2013/11/19 职场文书
公司成本主管岗位责任制
2014/02/21 职场文书
优乐美广告词
2014/03/14 职场文书
儿童生日会策划方案
2014/05/15 职场文书
优秀教师主要事迹材料
2015/11/04 职场文书
五年级语文教学反思
2016/03/03 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书