php中重写和final关键字的使用

  为什么把重写和final放在一起,原因就是一条:final的意思是不可更改的,也就是说final定义的东西是不可改变的,下面具体来说一下。

来看一段简单的代码:

 1 class BaseClass {
 2    final public function test() {
 3        echo "BaseClass::test() called
";
 4    }
 5    
 6    public function moreTesting() {
 7        echo "BaseClass::moreTesting() called
";
 8    }
 9 }
10 final class AbcClass{
11   public function abc(){
12     echo "abc";
13   }
14 }
15 /*
16 class Abcd extends AbcClass{
17   public function abcd(){
18   }
19 }
20 */
21 
22 class ChildClass extends BaseClass {
23    public function moreTesting($tmp=null) {
24        echo "ChildClass::moreTesting() called
";
25    }
26 }

代码中定义了一个类,BaseClass然后ChildClass继承了这个类并且重写了这个类中的方法moreTesting,重写方法的时候方法名一定要一样,参数可以改变。这时候对象调用的时候就是调用的重写后的方法。

代码中注释了一个地方,如果这段代码被执行就会报错,因为AbcClass是final关键字定义的类,可以正常被使用,但不能被任何类继承。

类中final关键字定义的方法也不能被重写,比如BaseClass中的test方法,只能使用,如果重写会出现错误。

原文地址:https://www.cnblogs.com/freeweb/p/4639044.html