PHP和JAVA中的重載(overload)和覆蓋(override) 介紹
更新時間:2012年03月01日 21:44:53 作者:
PHP不支持方法和操作符重載。JAVA不支持操作符的重載(但是“+”實際上是一種操作符重載)
重載:同一個類中,函數(shù)名一樣,返回值或者參數(shù)類型,個數(shù)不一樣的叫做重載。
覆蓋:同名函數(shù),同返回值類型,同參數(shù)的叫做覆蓋。指的是子類對父類中方法的覆蓋。
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語言規(guī)范中,一個方法的特征僅包括方法的名字,參數(shù)的數(shù)目和種類,而不包括方法的返回類型,參數(shù)的名字以及所拋出來的異常。在Java編譯器檢查方法的重載時,會根據(jù)這些條件判斷兩個方法是否是重載方法。但在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 --重寫,覆寫,覆蓋
子類有多個相同方法名稱,但是參數(shù)不同,叫overload - 重(zhong)載,過載
重載是:
當多個方法具有相同的名字而含有不同的參數(shù)時產(chǎn)生
那么對參數(shù)不同的調(diào)用,實際調(diào)用不同的方法
也可以理解為實際上有兩個方法,名字同,參數(shù)不同!
覆蓋(OVERWRITE)注意
不能降低原方法的"可見度
返回類型不同都不能構(gòu)成方法的覆蓋
重載(OVERLOAD)注意
只有參數(shù)不同才能構(gòu)成重載
覆蓋:同名函數(shù),同返回值類型,同參數(shù)的叫做覆蓋。指的是子類對父類中方法的覆蓋。
PHP不支持方法和操作符重載。JAVA不支持操作符的重載(但是“+”實際上是一種操作符重載)。
復(fù)制代碼 代碼如下:
<?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語言規(guī)范中,一個方法的特征僅包括方法的名字,參數(shù)的數(shù)目和種類,而不包括方法的返回類型,參數(shù)的名字以及所拋出來的異常。在Java編譯器檢查方法的重載時,會根據(jù)這些條件判斷兩個方法是否是重載方法。但在Java編譯器檢查方法的置換時,則會進一步檢查兩個方法(分處超類型和子類型)的返還類型和拋出的異常是否相同。
QUESTION NO: 3
復(fù)制代碼 代碼如下:
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 --重寫,覆寫,覆蓋
子類有多個相同方法名稱,但是參數(shù)不同,叫overload - 重(zhong)載,過載
重載是:
當多個方法具有相同的名字而含有不同的參數(shù)時產(chǎn)生
那么對參數(shù)不同的調(diào)用,實際調(diào)用不同的方法
也可以理解為實際上有兩個方法,名字同,參數(shù)不同!
覆蓋(OVERWRITE)注意
不能降低原方法的"可見度
返回類型不同都不能構(gòu)成方法的覆蓋
重載(OVERLOAD)注意
只有參數(shù)不同才能構(gòu)成重載
相關(guān)文章
php數(shù)組排序usort、uksort與sort函數(shù)用法
這篇文章主要介紹了php數(shù)組排序usort、uksort與sort函數(shù)用法,詳細介紹了usort、uksort與sort函數(shù)在數(shù)組排序中的應(yīng)用,具有不錯的參考借鑒價值,需要的朋友可以參考下2014-11-11PHP使用 Imagick 擴展實現(xiàn)圖片合成,圓角處理功能示例
這篇文章主要介紹了PHP使用 Imagick 擴展實現(xiàn)圖片合成,圓角處理功能,結(jié)合具體實例形式分析了PHP使用 Imagick 擴展的圖形處理、生成相關(guān)操作技巧,需要的朋友可以參考下2019-09-09php實現(xiàn)的Curl封裝類Curl.class.php用法實例分析
這篇文章主要介紹了php實現(xiàn)的Curl封裝類Curl.class.php用法,以完整實例形式較為詳細的分析了Curl封裝類的定義及相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09PHP生成各種隨機驗證碼的方法總結(jié)【附demo源碼】
這篇文章主要介紹了PHP生成各種隨機驗證碼的方法,結(jié)合具體實例形式總結(jié)分析了php常用的生成驗證碼操作相關(guān)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-06-06