Medidas oficiales
Se puede usar una palabra clave "final" proporcionada por el idioma Java para realizar esta tarea. Eche un vistazo al siguiente ejemplo del código fuente:
La copia del código es la siguiente:
// Finaldemo.java
Public Final Clase FinalDemo {
}
Hagamos otra clase a continuación, que heredará la clase declarada anteriormente. La palabra clave "extiende" proporcionada por el idioma Java permitirá que una clase herede de una clase existente.
La copia del código es la siguiente:
// FinalDemo2.Java
clase pública FinalDemo2 extiende FinalDemo {
}
Después de compilar la primera clase, si luego compila la segunda clase, el compilador JDK informa un error y recibirá el siguiente mensaje de error:
FinalDemo2.Java:1: No se puede heredar de FinalDemo final
clase pública FinalDemo2 extiende FinalDemo {}
^
1 error
Ahora, ha evitado con éxito que la primera clase sea heredada por otra clase a través de métodos oficiales.
Medidas no oficiales
Sin embargo, la forma de evitar que las clases sean heredadas por otras clases no es única. Teniendo en cuenta el siguiente código, declaro que el constructor es privado y también declaro un método estático para devolver un objeto de clase.
La copia del código es la siguiente:
clase pública PrivateTest {
private privateTest () {
System.out.println ("Constructor predeterminado privado");
}
public static privateTest getInstance () {
devolver nuevo privateTest ();
}
}
El código modificado anteriormente se llama "Patrón Singleton", un método GetInstance siempre devuelve solo una instancia de esta clase. Pero, ¿por qué este código evita que la clase sea heredada? Considere el siguiente código, la clase declarada debe heredar la clase anterior.
Public Class PrivateTest2 extiende PrivateTest {
}
Después de compilar la primera clase, si luego compila la segunda clase, el compilador JDK informa un error y recibirá el siguiente mensaje de error:
PrivateTest2.Java:1: PrivateTest () tiene acceso privado en PrivateTest
clase pública privateTest2 extiende privateTest {
^
1 error
La segunda clase no puede heredar la primera clase. Pero, ¿qué significa el error? El lenguaje Java requiere que se proporcione al menos un método de componente en una clase. Si no proporciona ningún método de artefacto, el JDK insertará un método de artefacto predeterminado en la clase que declaró. En otras palabras, el valor predeterminado es un método de componente sin parámetros, cuerpo de componentes vacíos y un permiso de acceso público. Sin embargo, si define un método de componente usted mismo, el compilador JDK no insertará un método de componente predeterminado. Acabamos de declarar un método de componente predeterminado en la clase PrivateTest, pero cambiamos el permiso de acceso público predeterminado al permiso privado, que están en línea con las reglas de la verificación de sintaxis del compilador JDK.
Ahora echemos un vistazo al segundo departamento. El lenguaje Java también requiere que llame al método de componente de la súper clase en la primera línea del método de componente. Esto es necesario para comenzar las características de herencia. En Java, completamos esta tarea llamando al método super (), que se asignará al método de componente de una superclase. Si no proporciona un constructor predeterminado para la superclase, el compilador JDK insertará un método de componente de superclase predeterminado para llamar.
Acabamos de declarar el constructor como un permiso privado en la primera clase. Ahora, cuando heredamos esta clase de otras clases, el compilador intentará llamar a un método de componente superclase predeterminado. Debido a que los métodos de componentes dentro del alcance de la superclase se declaran como permiso privado, el compilador informará un error que dice que no se puede llamar a los métodos de componentes de superclase. Por lo tanto, evitamos que una clase sea heredada por otras clases a través de métodos no oficiales.
Usman Saleem
Universidad de Mohammad Ali Jinnah
Correo electrónico: [email protected]