PHP和JAVA中的重载(overload)和覆盖(override) 介绍
重载:同一个类中,函数名一样,返回值或者参数类型,个数不一样的叫做重载。
覆盖:同名函数,同返回值类型,同参数的叫做覆盖。指的是子类对父类中方法的覆盖。
PHP不支持方法和操作符重载。JAVA不支持操作符的重载(但是“+”实际上是一种操作符重载)。
<div class="codetitle"><a style="CURSOR: pointer" data="35833" class="copybut" id="copybut35833" onclick="doCopy('code35833')"> 代码如下:
<div class="codebody" id="code35833">
<?
PHP Class Father {
public function fmeth1() {
echo "fmeth1()...
";
}
//public function fmeth1($str1) {
// echo "fmeth1() with $str1...
";
//}
}
Class Son extends Father {
public function fmeth1() {
echo "fmeth1() in son...
";
}
}
$s=new Son();
$s->fmeth1();
?>
其中
父类中的fmeth1
方法是不能重载的。
java中(overload)重载与(override)覆盖的事例小解
在Java语言规范中,一个
方法的特征仅
包括方法的名字,参数的数目和种类,而不
包括方法的返回类型,参数的名字以及所抛出来的异常。在Java编译器检查
方法的重载时,会根据这些
条件判断两个
方法是否是重载
方法。但在Java编译器检查
方法的置换时,则会进一步检查两个
方法(分处超类型和子类型)的返还类型和抛出的异常是否相同。 QUESTION NO: 3
<div class="codetitle">
<a style="CURSOR: pointer" data="27547" class="copybut" id="copybut27547" onclick="doCopy('code27547')"> 代码如下: <div class="codebody" id="code27547">
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)注意
只有参数不同才能构成重载
原文链接:https://www.f2er.com/php/27294.html