Temas > Programacion > Php > Metodos y clases final
Julio

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)













¿Has olviado tu contraseña?

Pulsa aquí para registrate




Google






LunMarMieJueVieSabDom
 123456
78910111213
14151617181920
21222324252627
282930    

Viernes 4 de Abril 2025
Semana 14

..............................................................................................................................................................................................................................................
(Contacto)..
Esta web utiliza cookies para obtener datos estadísticos de la navegación de sus usuarios. Política de privacidad y Aviso legal