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:

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
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