PHP和JAVA中的重载(overload)和覆盖(override) 介绍
程序员文章站
2022-05-25 21:11:11
重载:同一个类中,函数名一样,返回值或者参数类型,个数不一样的叫做重载。 覆盖:同名函数,同返回值类型,同参数的叫做覆盖。指的是子类对父类中方法的覆盖。 php不支持方法和...
重载:同一个类中,函数名一样,返回值或者参数类型,个数不一样的叫做重载。
覆盖:同名函数,同返回值类型,同参数的叫做覆盖。指的是子类对父类中方法的覆盖。
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不支持方法和操作符重载。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的list()的一步操作给一组变量进行赋值的使用
下一篇: PHP中其实也可以用方法链
推荐阅读
-
java中重载、覆盖和隐藏三者的区别分析
-
java中重载、覆盖和隐藏三者的区别分析
-
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
-
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
-
PHP和JAVA中的重载(overload)和覆盖(override) 介绍_PHP教程
-
介绍重写(Override)与重载(Overload)的区别和联系
-
allowoverride PHP和JAVA中的重载overload和覆盖override 介绍
-
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
-
介绍重写(Override)与重载(Overload)的区别和联系
-
PHP和JAVA中的重载(overload)和覆盖(override) 介绍_PHP