miércoles, 11 de mayo de 2022

88 - Clases finales

 En Java podemos sellar una clase para evitar que otras clases hereden de la misma mediante la palabra clave 'final' previo a la declaración de la clase:

public final class [Nombre de la clase] {
}

En algunas situaciones donde veamos que no tiene sentido aplicar herencia a la clase que estamos creando podemos declararla de tipo final. Si luego alguien quiere heredar de la misma se genera un error de compilación.



Problema:

Desarrollar una clase que represente un punto en el plano y tenga los siguientes métodos: constructor, imprimir en que cuadrante se encuentra dicho punto (concepto matemático, primer cuadrante si x e y son positivas, si x<0 e y>0 segundo cuadrante, etc.)

Sellar la clase para evitar que se pueda aplicar herencia en la misma.

Programa:

public final class Punto {
private int x, y;

public Punto(int x, int y) {
this.x = x;
this.y = y;
}

void imprimirCuadrante() {
System.out.print("[" + x + "," + y + "] ");
if (x > 0 && y > 0)
System.out.println("Se encuentra en el primer cuadrante.");
else if (x < 0 && y > 0)
System.out.println("Se encuentra en el segundo cuadrante.");
else if (x < 0 && y < 0)
System.out.println("Se encuentra en el tercer cuadrante.");
else if (x > 0 && y < 0)
System.out.println("Se encuentra en el cuarto cuadrante.");
else
System.out.println("El punto no está en un cuadrante.");
}

public static void main(String[] ar) {
Punto punto1;
punto1 = new Punto(4, 5);
punto1.imprimirCuadrante();
Punto punto2;
punto2 = new Punto(-4, 5);
punto2.imprimirCuadrante();

}
}

Hemos declarado la clase 'Punto' de tipo final para evitar que se puede heredar de ella:

public final class Punto {

Luego si se intenta heredar de la misma debe generar un error sintáctico:

java final class

Clases finales en el API de Java.

Podemos nombrar que el API de Java tiene una gran cantidad de clases definidas como final:

  • System
  • Scanner
  • String
  • Math
  • Byte
  • Short
  • Integer
  • Long
  • Float
  • Double
  • Boolean
  • Character

Como podemos ver hay numerosas clases en el API de Java que hemos utilizado a lo largo del curso que están pensadas para que no las heredemos.

Problema propuesto

  1. Desarrollar una clase que represente un Cuadrado. Definir dos métodos que retornen la superficie y el perímetro.
    Crear la clase como 'final'.

public final class Cuadrado {

private int lado;

public Cuadrado(int lado) {
this.lado = lado;
}

public int retornarPerimetro() {
return lado * 4;
}

public int retornarSuperficie() {
return lado * lado;
}

public static void main(String[] ar) {
Cuadrado cuadrado1 = new Cuadrado(20);
System.out.println("El perímetro de un cuadrado de lado 20 es " +
cuadrado1.retornarPerimetro());
System.out.println("La superficie de un cuadrado de lado 20 es " +
cuadrado1.retornarSuperficie());
}
}

No hay comentarios:

Publicar un comentario