PHP 快速導覽 - final 類別與方法

使用 final 宣告的類別 (class) 不能被繼承,同樣的,使用 final 宣告的方法 (method) 不能被子類別 (subclass) 改寫。



舉例如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
class Demo {
    public function do_something() {
        echo "1\n";
    }
    
    final public function do_something2() {
        echo "2\n";
    }
}
 
class Demo2 extends Demo {
    public function do_something2() {
        echo "3\n";
    }
}
 
$d = new Demo2();
$d->do_something();
$d->do_something2();
 
/* 《程式語言教學誌》的範例程式
    檔名:class15.php
    功能:示範 PHP 程式
    作者:張凱慶
    時間:西元 2013 年 2 月 */
?>


此例的 Demodo_something2()final 方法
7
8
9
final public function do_something2() {
    echo "2\n";
}


Demo2 繼承自 Demo ,若執行 do_something2() 會發生錯誤



final 類別則不能被繼承,例如
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
final class Demo3 {
   public function do_something() {
       echo "1\n";
   }
}
 
class Demo4 extends Demo3 {}
 
$d = new Demo4();
$d->do_something();
 
/* 《程式語言教學誌》的範例程式
    檔名:class16.php
    功能:示範 PHP 程式
    作者:張凱慶
    時間:西元 2013 年 2 月 */
?>


Demo3final 類別
2
final class Demo3 {


Demo4 繼承 Demo3 同樣會發生錯誤



中英文術語對照
類別class
方法method
子類別subclass


您可以繼續參考
類別與物件


相關目錄
回 PHP 快速導覽
回 PHP 教材
回首頁


參考資料
http://www.php.net/manual/en/language.oop5.final.php

沒有留言: