クラスの継承・メソッドのオーバーライドの制限

final修飾子

通常は、クラスの継承もメソッドのオーバーライドも制限無く行えますが、「final修飾子」で宣言されたクラスの派生クラスは定義出来なくなり、また「final修飾子」で宣言されたメソッドはオーバーライド出来なくなります。以下のサンプルと結果をご覧下さい。

<pre>
<?php
    class BASE{
        public function normal_method(){
            //
        }
        #メソッドを「final」宣言
        final public function final_method(){
            //
        }
    }
    
    #クラスを「final」宣言
    final class SUB extends BASE{
        public function normal_method(){
            //
        }
        #「final」宣言されたメソッドをオーバーライドする
        /*
        public function final_method(){
            //
        }
        */
    }
    
    #「final」宣言されたクラスを継承する
    /*
    class HODE extends SUB{
        //
    }
    */
?>
</pre>
Fatal error:「final」宣言されたメソッドのオーバーライドは出来ない)
(Fatal error:「final」宣言されたクラスは継承出来ない)

例によって、コメントアウトしている所で「E_ERROR」エラーが発生します。

例外処理」の、「Exception」クラス(定義済みクラス)の「get*()」メソッドが「final」宣言されていて、派生クラスでオーバーライドされないように保護されています。

メソッドの機能が確定し、派生クラスでオーバーライドされるのを防いだりするのに便利な機能です。

作成日:2004年12月31日 最終更新日:2004年12月31日
【印刷モード風モード で表示】