Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

337
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda