PHP 面向對象 final類與final方法


final---用於類、方法前。

final類---不可被繼承。

final方法---不可被覆蓋。

如果我們不希望一個類被繼承,我們使用final來修飾這個類。這個類將無法被繼承。

比如我們設定的Math類,涉及了我們要做的數學計算方法,這些算法也沒有必要修改,也沒有必要被繼承,我們把它設置成final類型。

 1 <? 
 2 //聲明一個final類Math 
 3 final class Math
 4 { 
 5     public static $pi = 3.14; 
 6 
 7     public function __toString()
 8     { 
 9         return "這是Math類。"; 
10     } 
11 } 
12 $math = new Math(); 
13 echo $math; 
14 
15 //聲明類SuperMath 繼承自 Math類 
16 class SuperMath extends Math 
17 { 
18 } 
19 //執行會出錯,final類不能被繼承。 
20 
21 ?> 

程序運行結果 

Fatal error: Class SuperMath may not inherit from final class (Math) in E:\PHPProjects\test.php on line 16

如果不希望類中的某個方法被子類重寫,我們可以設置這個方法為final方法,只需要在這個方法前加上final修飾符。

如果這個方法被子類重寫,將會出現錯誤。

 1 <? 
 2 //聲明一個final類Math 
 3 class Math
 4 { 
 5     public static $pi = 3.14; 
 6     public function __toString()
 7     { 
 8         return "這是Math類。"; 
 9     } 
10   public final function max($a,$b)
11   { 
12       return $a > $b ? $a : $b ; 
13   } 
14 } 
15 //聲明類SuperMath 繼承自 Math類 
16 class SuperMath extends Math
17 { 
18     public final function max($a,$b){} 
19 } 
20 //執行會出錯,final方法不能被重寫。 
21 
22 ?> 

程序運行結果 

Fatal error: Class SuperMath may not inherit from final class (Math) in E:\PHPProjects\test.php on line 16

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM