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