Este artículo muestra el concepto básico orientado a objetos en Java: Ocultación de campo.
1. ¿Se puede anular el campo en Java?
Primero echemos un vistazo al siguiente ejemplo que crea dos Sub objetos. Uno está asignado a una referencia secundaria y el otro a una referencia superior.
package oo; class Super { String s = "Super"; } class Sub extends Super { String s = "Sub"; } public class FieldOverriding { public static void main(String[] args) { Sub c1 = new Sub(); System.out.println(c1.s); Super c2 = new Sub(); System.out.println(c2.s); } } |
¿Cuál es la salida?
Sub Super
Creamos dos objetos Sub, pero ¿por qué el segundo imprime «Super»?
2. Ocultar campos en lugar de anularlos
En [1], hay una definición clara de campos de ocultación:
Dentro de una clase, un campo que tiene el mismo nombre que un campo en la superclase oculta el campo de la superclase, incluso si sus tipos son diferentes. Dentro de la subclase, el campo de la superclase no puede ser referenciado por su nombre simple. En cambio, se debe acceder al campo a través de super. En términos generales, no recomendamos ocultar campos ya que dificulta la lectura del código.
A partir de esta definición, los campos de miembros no se pueden anular como métodos. Cuando una subclase define un campo con el mismo nombre, la subclase simplemente declara un nuevo campo. El campo en la superclase es oculto. NO está anulado, por lo que no se puede acceder de forma polimórfica.
3. Formas de acceder a campos ocultos
1). Al utilizar el tipo de referencia de crianza, se puede acceder a los campos principales ocultos, como en el ejemplo anterior.
2). Al lanzar puedes acceder al miembro oculto en la superclase.
System.out.println(((Super)c1).s); |
Referencias:
1. Ocultar campos