Java classe abstraite champs remplacer

J'ai une classe abstraite qui doit mettre en œuvre un champ public, ce domaine est une interface ou d'une autre classe abstraite.

quelque chose comme ceci:

public abstract class GenericContainer {
    public GenericChild child;
}

public abstract class GenericChild {
    public int prop1=1;
}

public abstract class SpecialChild extend GenericChild {
    public int prop1=2;
}

Maintenant j'ai une autre classe spécialisée Conteneur:

public abstract class SpecialContainer extends GenericContainer {
    public SpecialChild child=new SpecialChild(); //PAY ATTENTION HERE!
}

Java permettez-moi de le compiler, et j'IMAGINE que le champ child dans SpecialContainer est automatiquement surcharger le champ child de la GenericContainer...
Les questions sont:
Suis-je le droit? L'automatique "surcharge" de l'enfant qui va arriver?

Et, plus important question, si j'ai une autre classe comme ceci:

public class ExternalClass {
    public GenericContainer container=new SpecialContainer();
    public int test() {
         return container.child.prop1
    }
}

test() sera de retour 1 ou 2? je veux dire le GenericContainer champ de conteneurs ce prop1 appeler, le générique ou le spécial?
Et quoi de si spécial prop1 a été déclaré comme une Chaîne de caractères (oui java me permettre de compiler aussi dans ce cas)?

Merci!

Pas de. les champs n'obtenez pas remplacées, les seules méthodes pour le faire.
Donc, si dans "SpecialChild" j'ai une méthode qui utilisent prop1, ce qu'il obtiendra au premier appel? 1 ou 2? J'ai essayé et la suppression de prop1 de SpecialChild va me permettre d'écrire une méthode dans SpecialChild qui utilisent prop1 aussi, si c'est uniquement définie en GenericChild... Donc je pense que une sorte de surcharge se passe...
vous pouvez toujours essayer exécution.
Programme ci-dessus jette "NullPointerException". Pour la question, la réponse est les champs ne peuvent pas être redéfinies. Si vous définissez un même nom de champ dans la sous-classe puis une sous-classe de champ permet de masquer la classe super champ.
oui, parce que dans le GenericContainer je n'ai pas initialisé Générique de l'enfant. sur mon projet complet qui il a travaillé.

OriginalL'auteur Alex | 2013-03-09