Modificadores de JScript
Actualización: noviembre 2007
Los modificadores de JScript cambian el comportamiento y la visibilidad de las clases, interfaces o miembros de clase o interfaz. Los modificadores pueden utilizarse para definir clases e interfaces, pero normalmente no son necesarios.
Modificadores de visibilidad
Los modificadores de visibilidad restringen el modo en que código externo obtiene acceso a las clases, interfaces y sus miembros. Tales restricciones pueden utilizarse para fomentar buenas prácticas en la programación de objetos evitando la llamada a campos y métodos internos especializados.
De manera predeterminada, cualquier código que pueda obtener acceso a una clase puede tener acceso a cualquier miembro de esa clase. Utilizando modificadores de visibilidad, puede evitarse de manera selectiva que el código externo tenga acceso a miembros concretos de la clase, permitir sólo a clases del mismo paquete el acceso a los miembros o permitir sólo a las clases derivadas el acceso a los miembros de la clase.
Los modificadores de visibilidad no se pueden aplicar a las funciones ni a las variables globales. Los únicos modificadores de visibilidad que se pueden usar conjuntamente son protected e internal.
Modificador de visibilidad |
Válido para |
Significado |
---|---|---|
clase, miembro de clase, interfaz, miembro de interfaz o enumeraciones |
El miembro está visible para cualquier código que tenga acceso a la clase sin restricciones de visibilidad. De manera predeterminada, en JScript las clases, las interfaces y sus miembros son públicos. |
|
miembro de clase |
El miembro está visible únicamente en la clase en la que está declarado. No está visible para las clases derivadas. El código externo a la clase actual no puede tener acceso a miembros privados. |
|
miembro de clase |
El miembro está visible únicamente en la clase en la que está declarado y en sus clases derivadas. El modificador protected no se puede utilizar para clases en ámbitos de paquete, pero se puede utilizar en clases anidadas. |
|
clase, miembro de clase, enumeración |
La clase, el miembro de clase o la enumeración está visible en todo el paquete en el que se declara. No está visible fuera del paquete. |
Modificadores de herencia
Los modificadores de herencia controlan cómo los métodos y propiedades de clases derivadas reemplazan los métodos y propiedades de una clase base. Mediante este control, se puede controlar si los métodos de clases derivadas reemplazarán o no una clase que cree el usuario.
De manera predeterminada, los métodos de una clase derivada reemplazarán los métodos de la clase base, a menos que se utilice el atributo hide de versión segura en la clase derivada. Este atributo ayuda a impedir el reemplazo. El uso de modificadores de herencia permite ayudar a controlar si determinados métodos se reemplazan siempre o no se reemplazan nunca.
En algunas situaciones, es posible que necesite asegurarse de que no se reemplaza el método de una clase base. Por ejemplo, si define una clase en un paquete, puede utilizar el modificador final para garantizar que las clases derivadas no cambiarán los métodos ni las propiedades de la clase.
Por otro lado, es posible que desee que se reemplacen determinados métodos de la clase. Por ejemplo, puede crear una clase que proporcione alguna funcionalidad básica pero utilice el modificador abstract para algunos métodos. Corresponde al autor de la clase derivada decidir la implementación de los métodos abstract.
Los modificadores de versión segura, que controlan también el reemplazo, lo hacen desde la clase derivada y no desde la clase base. Los modificadores de versión segura tienen efecto únicamente si el método de la clase base que van a reemplazar no tiene modificadores de herencia.
No es posible combinar dos modificadores de herencia ni un modificador de herencia con el modificador static.
Modificador de herencia |
Válido para |
Significado |
---|---|---|
clase, método o propiedad |
Con métodos o propiedades, este modificador indica que el miembro no tiene implementación. Con clases, indica que hay uno o varios métodos implementados. No se pueden crear instancias de una clase abstracta ni una clase que contenga un miembro abstracto utilizando la palabra clave new, pero se puede utilizar como una clase base. |
|
clase, método o propiedad |
Se usa para clases que no puedan ampliarse o métodos que no puedan ser reemplazados. El uso de final impide que las clases derivadas cambien el comportamiento de la clase reemplazando funciones importantes. Los métodos con el modificador final se pueden ocultar o sobrecargar, pero no reemplazar. |
Modificadores de versión segura
Los modificadores de versión segura ayudan a controlar los métodos de una clase derivada que reemplazan los métodos de una clase base. Mediante este control, puede controlar si una clase que cree reemplazará los métodos de la clase base o no.
De manera predeterminada, los métodos de una clase derivada reemplazarán los métodos de una clase base, aunque los modificadores de herencia de la definición de la clase derivada pueden ayudar a impedir también el reemplazo. El uso de modificadores de versión segura permite ayudar a controlar si determinados métodos se reemplazan o no.
En algunas situaciones, es posible que necesite asegurarse de que los métodos de la clase base no se reemplazarán. Por ejemplo, puede ampliar una clase para cambiar el comportamiento de los métodos de la clase base. Si no desea que esos métodos se reemplacen en la clase base, puede utilizar el modificador hide para las declaraciones de método.
Por otro lado, es posible que desee que se reemplacen determinados métodos de la clase base. Por ejemplo, puede que desee cambiar los métodos de una clase sin modificar la clase. Al extender la clase y utilizar el modificador override para las declaraciones de métodos, puede dar lugar a que los nuevos métodos reemplacen la clase base.
El uso satisfactorio de los modificadores de versión segura depende de si se han utilizado o no modificadores de herencia en la declaración de los métodos de la clase base. Los métodos de la clase base marcados con el modificador final no se pueden reemplazar y los métodos de la clase base marcados con el modificador abstract no se pueden ocultar, a menos que se dé una implementación explícita del método de la clase base abstracta.
No puede combinar dos modificadores de versión segura ni un modificador de versión segura con un modificador static. Cuando se ejecuta en modo de versión segura, sólo se puede utilizar un modificador de versión segura para cada método que reemplace un método de la clase base.
Modificador de versión segura |
Válido para |
Significado |
---|---|---|
método o propiedad |
El miembro no reemplaza un miembro con el mismo nombre en la clase base. |
|
método o propiedad |
De manera predeterminada, los miembros reemplazan los miembros con el mismo nombre en la clase base. |
expando (Modificador)
El modificador expando hace que un objeto basado en una clase se comporte como si fuera un objeto de JScript. Los métodos y las propiedades se pueden agregar de manera dinámica a un objeto expando. Para obtener más información, vea Objetos basados en prototipos.
Puede utilizar el modificador expando independientemente de los demás modificadores.
Modificador |
Válido para |
Significado |
---|---|---|
clase o método |
A una clase se le da una propiedad indizada predeterminada que es capaz de almacenar y recuperar propiedades dinámicas (expandos). Con un método, indica que es constructor de un objeto expando. |
static (Modificador)
El modificador static significa que un miembro de una clase pertenece a la propia clase y no a las instancias de la clase. En consecuencia, los datos y métodos específicos de la clase pueden no estar asociados con ninguna instancia específica.
No es posible combinar un modificador static con ninguno de los modificadores de herencia o de versión segura.
Modificador |
Válido para |
Significado |
---|---|---|
método, propiedad, campo o clase |
Con los métodos, indica que se puede llamar sin una instancia de la clase. Para propiedades y campos, indica que una copia es compartida por todas las instancias. No se debe confundir el modificador static con la instrucción static, que denota código que inicializa la clase. |