子クラスで、メソッドを、オーバーライド(再定義)できないようにするには、親クラスでメソッドを定義するときに、final
キーワードを前に付け、finalメソッドにする。
finalメソッドをオーバーライド(再定義)しようとすると、エラーとなる。
final
キーワードを付けられるのは、メソッドとクラス。プロパティには、final
キーワードを付けられない。
書式
class クラス名 // クラスを定義
{
final function メソッド名() { // finalメソッドを定義
メソッド内処理文;
}
}
{
final function メソッド名() { // finalメソッドを定義
メソッド内処理文;
}
}
サンプル
「taxClass5」クラスの、「func_tax」メソッドを、オーバーライド(再定義)することはできるが、「func_echo」メソッドは、finalメソッドなので、オーバーライド(再定義)できない。
<?php
class taxClass5
{
function func_tax( $var ) {
return $var * ( 1 + 0.05 );
}
final function func_echo( $var ) {
echo '税込:' . $this->func_tax( $var ) . '円<br />';
}
}
class taxClass7 extends taxClass5
{
function func_tax( $var ) {
return $var * ( 1 + 0.07 );
}
}
$var_class = new taxClass5();
$var_class->func_echo( 100 );
$var_class = new taxClass7();
$var_class->func_echo( 100 );
?>
class taxClass5
{
function func_tax( $var ) {
return $var * ( 1 + 0.05 );
}
final function func_echo( $var ) {
echo '税込:' . $this->func_tax( $var ) . '円<br />';
}
}
class taxClass7 extends taxClass5
{
function func_tax( $var ) {
return $var * ( 1 + 0.07 );
}
}
$var_class = new taxClass5();
$var_class->func_echo( 100 );
$var_class = new taxClass7();
$var_class->func_echo( 100 );
?>
↓↓↓出力結果↓↓↓
税込:105円
税込:107円
税込:107円