| 17 - Métodos y clases final. | 
Si a un método le agregamos el modificador final significa que ninguna subclase puede sobreescribirlo. Este mismo modificador se lo puede aplicar a una clase, con esto estaríamos indicando que dicha clase no se puede heredar.
Confeccionaremos nuevamente las clases Operacion y Suma utilizando este modificador. Definiremos un método final en la clase Operacion y la subclase la definiremos de tipo final.
pagina1.php
<html>
<head>
<title>Pruebas</title>
</head>
<body>
<?php
class Operacion {
  protected $valor1;
  protected $valor2;
  protected $resultado;
  public function __construct($v1,$v2)
  {
    $this->valor1=$v1;
    $this->valor2=$v2;
  }
  public final function imprimirResultado()
  {
    echo $this->resultado.'<br>';
  }
}
final class Suma extends Operacion{
  private $titulo;
  public function __construct($v1,$v2,$tit)
  {
    Operacion::__construct($v1,$v2);
    $this->titulo=$tit;
  }
  public function operar()
  {
    echo $this->titulo;
    echo $this->valor1.'+'.$this->valor2.' es ';
    $this->resultado=$this->valor1+$this->valor2;
  }
}
$suma=new Suma(10,10,'Suma de valores:');
$suma->operar();
$suma->imprimirResultado();
?>
</body>
</html> 
Podemos ver que la sintaxis para definir un método final es:
class Operacion {
...
  public final function imprimirResultado()
  {
    echo $this->resultado.'<br>';
  }
}
Luego si una subclase intenta redefinir dicho método:
class Suma extends Operacion {
...
  public function imprimirResultado()
  {
    ...
  }
}
Se produce el siguiente error:
Fatal error: Cannot override final method Operacion::imprimirResultado()
El mismo concepto se aplica cuando queremos que una clase quede sellado y no dejar crear subclases a partir de ella:
final class Suma extends Operacion{
...
}
Agregando el modificador final previo a la declaración de la clase estamos indicando que dicha clase no se podrá heredar.
Luego si planteamos una clase que herede de la clase Suma:
class SumaTresValores extends Suma {
...
}
Produce el siguiente error:
Fatal error: Class SumaValores may not inherit from final class (Suma)