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

2015-01-24信息快讯网

PHP不支持方法和操作符重载。JAVA不支持操作符的重载(但是“+”实际上是一种操作符重载)

重载:同一个类中,函数名一样,返回值或者参数类型,个数不一样的叫做重载。
覆盖:同名函数,同返回值类型,同参数的叫做覆盖。指的是子类对父类中方法的覆盖。
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 has encountered a Stack overflow问题解决方法
eAccelerator的安装与使用详解
基于PHP输出缓存(output_buffering)的深入理解
php缓冲 output_buffering的使用详解
探讨PHP使用eAccelerator的API开发详解
探讨:使用XMLSerialize 序列化与反序列化
PHP stripos()函数及注意事项的分析
深入php var_dump()函数的详解
浅谈php serialize()与unserialize()的用法
PHP/Javascript/CSS/jQuery常用知识大全详细整理第1/2页
PDO版本问题 Invalid parameter number: no parameters were bound
Could not load type System.ServiceModel.Activation.HttpModule解决办法
php和javascript之间变量的传递实现代码
php中拷贝构造函数、赋值运算符重载
PHP代码网站如何防范SQL注入漏洞攻击建议分享
JS中encodeURIComponent函数用php解码的代码
php preg_filter执行一个正则表达式搜索和替换
php中echo()和print()、require()和include()等易混淆函数的区别
PHP中运用jQuery的Ajax跨域调用实现代码
PHP中call_user_func_array()函数的用法演示
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
PHP函数spl_autoload_register()用法和__autoload()介绍
非常好用的两个PHP函数 serialize()和unserialize()
PHP警告Cannot use a scalar value as an array的解决方法
php数组函数序列之array_values() 获取数组元素值的函数与方法
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
php XMLWriter类的简单示例代码(RSS输出)
Sorting Array Values in PHP(数组排序)
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
php判断输入不超过mysql的varchar字段的长度范围
php面向对象全攻略 (八)重载新的方法
优化NFR之一 --MSSQL Hello Buffer Overflow
©2014-2024 dbsqp.com