Categorías
Classes & Interfaces

¿Por qué no se puede anular el campo?

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.

  Nivel de acceso: predeterminado frente a protegido

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

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *