2010-08-17 13 views

risposta

20

child.aombre (o nasconde) parent.a.

È legale Java, ma dovrebbe essere evitato. Mi aspetto che il tuo IDE abbia un'opzione per darti un avvertimento al riguardo.

Si noti, tuttavia, che questo è solo un problema perché è già stata esposta una variabile nel mondo. Se si assicura che tutte le variabili siano private per iniziare (separando l'API dei metodi dall'implementazione dei campi), non importa se sia il genitore che il figlio hanno gli stessi nomi di campo - il bambino non lo farebbe essere in grado di vedere i campi del genitore comunque. Potrebbe causare confusione se sposti un metodo dal figlio al genitore, e generalmente non è eccezionale per la leggibilità, ma è meglio della situazione nascosta.

4

È un po 'come sposare tuo cugino; Legale, ma non consigliato.

Può portare a tutti i tipi di comportamento confuso, poiché la dichiarazione sottoclasse nasconde la dichiarazione della classe genitore.

+0

selvaggia ......... – Andrew

9

Si chiama shadowing e può causare problemi agli sviluppatori.

Nel tuo caso:

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

stampa su

1 
0 
0

Non ci sarà alcun errore di compilazione o di errore di runtime.

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

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

Qui si sarà in grado di accedere a child.age dalla classe principale ... Questo è l'unico vantaggio che si può ottenere da avere variabile pubblica per classe derivata

Problemi correlati