Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

330
Vistas
Cómo restringir la herencia a una sola subclase en Java

Supongamos que hay una clase A que es una clase padre y una clase B que extiende A .

Ahora no debería permitir extender la clase A a la clase C ( class C extends A ), o cualquier otra clase.

¿Como hacer eso?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Es por eso que Java 17 tiene clases selladas. Esta función se agregó como una función de vista previa en Java 15.

Las clases e interfaces selladas restringen qué otras clases o interfaces pueden extenderlas o implementarlas.

En su caso, puede hacer lo siguiente:-

 public sealed class A permits B { } public class B extends A{ //No error } public class C extends A{ //error because class C is not permitted }

Los objetivos de las clases selladas en Java son: -

  • Permita que el autor de una clase o interfaz controle qué código es responsable de implementarla.

  • Proporcione una forma más declarativa que los modificadores de acceso para restringir el uso de una superclase.

  • Apoye las direcciones futuras en la coincidencia de patrones proporcionando una base para el análisis exhaustivo de patrones.


SI desea una clase no extensible, puede usar final .

 public final class A{ //Cannot be extended by other classes. }

Enlaces Útiles:

https://docs.oracle.com/en/java/javase/15/language/sealed-classes-and-interfaces.html

http://openjdk.java.net/jeps/409

https://www.baeldung.com/java-sealed-classes-interfaces

¿Qué son las clases selladas en Java 17?

over 4 years ago · Santiago Trujillo Denunciar

0

Si está utilizando una versión anterior de Java, la solución natural es simplemente hacer que el paquete de clase A sea privado. Esto evita que las clases fuera del paquete subclasifiquen A directamente.

Si A sí mismo necesita ser expuesto públicamente, todavía hay una solución: declarar otra clase PublicA que sea pública y final, donde PublicA es una subclase de A sin miembros adicionales o anulados. Luego, las clases en otros paquetes pueden usar PublicA en lugar de A , pero no pueden subclasificarlo.

La única otra diferencia práctica entre PublicA y A es que la clase B es una subclase de A pero no una subclase de PublicA ; entonces, por ejemplo obj instanceof PublicA no funcionará para detectar instancias de B u otras subclases públicas de A Si se puede requerir una instanceof de verificación como esta en otros paquetes, entonces se puede exponer una interfaz pública que implementa A , o PublicA puede exponer un método estático que devuelve arg instanceof A desde el interior del paquete, donde está permitido.

over 4 years ago · Santiago Trujillo Denunciar

0

Desde Java 15 en adelante, dicho caso de uso se puede implementar mediante el uso de un modificador sellado y una cláusula de permisos.

La restricción de una clase o interfaz para convertirse en padre de una clase o interfaz específica. Los siguientes son dos casos de uso, uno para clase y otro para interfaz .

1. Uso de Clase: supongamos que tenemos una clase ClazzA, queremos restringir esta clase para que se extienda solo por la clase ClazzB. Esa es ninguna otra clase puede extender ClazzA excepto ClazzB.

 public abstract sealed class ClazzA permits ClazzB { final String str; public ClazzA(String str) { this.str = str; } public void method() { // TODO } }

2. Uso de la interfaz: supongamos que tenemos una interfaz InterfaceA, queremos restringir esta interfaz para que se extienda solo por la interfaz InterfaceB. Esa es ninguna otra interfaz que pueda extenderse excepto InterfaceB

 public sealed interface InterfaceA permits InterfaceB { int method1(); default int defaultMethod() { return 0; } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda