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
    123
45678910
11121314151617
181920 21222324
252627282930 

Jueves 21 de Noviembre 2024
Semana 47

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