2010-08-17 17 views

Respuesta

20

child.asombras (o esconde) parent.a.

Es legal Java, pero debe evitarse. Espero que tu IDE tenga una opción para advertirte sobre esto.

Tenga en cuenta, sin embargo, que esto es solo un problema porque ya ha expuesto una variable al mundo. Si se asegura de que todas sus variables sean privadas para empezar (separando la API de métodos de la implementación de campos), entonces no importa si tanto el padre como el hijo tienen los mismos nombres de campo: el hijo no poder ver los campos de los padres de todos modos. Podría causar confusión si mueve un método del niño al padre, y generalmente no es bueno para la legibilidad, pero es mejor que la situación de ocultación.

4

Es un poco como casarse con tu primo; Legal, pero no recomendado.

Puede dar lugar a todo tipo de comportamiento confuso, ya que la declaración de la subclase oculta la declaración de clase principal.

+0

salvaje ......... – Andrew

9

Se llama sombreado y puede causar problemas para los desarrolladores.

En su caso:

Child child = new Child(); 
child.a = 1; 
System.out.println(child.a); 
System.out.println(((Parent)child).a); 

imprimiría

1 
0 
0

No habrá ningún error de compilación o un error de tiempo de ejecución.

public class Parent { 
private String name; 
private int age; 
} 

public class Child extends Parent { 
String parent; 
public int age; 
} 

Aquí podrá acceder a la child.age de la clase principal ... Ese es el único beneficio que puede obtener por tener variable pública para la clase derivada

Cuestiones relacionadas