Java abstract class-Felder überschreiben

Ich habe eine abstrakte Klasse implementieren sollte ein öffentliches Feld, dieses Feld ist ein interface oder eine abstrakte Klasse.

etwas wie dieses:

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;
}

Nun habe ich noch eine spezielle Klasse Container:

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

Java erlauben Sie mir kompiliert das, und ich kann mir VORSTELLEN, dass das Feld child im SpecialContainer wird automatisch eine überlastung der Bereich child des GenericContainer...
Die Fragen sind:
Bin ich richtig auf dieser? Die automatische 'überlastung' von Kind passieren wird?

Und, die wichtigere Frage, wenn ich in einer anderen Klasse wie folgt aus:

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

test() 1 zurück oder 2? ich meine die GenericContainer container-Feld, was prop1 nennen wird, die Allgemeinen oder die besonderen?
Und was ist, wenn der Besondere prop1 erklärt wurde, als String (ja, java erlauben Sie mir zu kompilieren, auch in diesem Fall)?

Dank!

Nein. Felder erhalten nicht überschrieben, nur die Methoden nicht.
Also, wenn 'SpecialChild' ich habe eine Methode, die mit prop1, was es wird beim ersten Aufruf? 1 oder 2? Ich habe versucht, und entfernen prop1 von SpecialChild wird mir erlauben, zu schreiben, eine Methode, die in SpecialChild, dass die Verwendung prop1 auch wenn diese nur definiert in GenericChild... Also ich denke, eine Art von überlastung passiert...
Sie könnten immer versuchen, die ausführen.
Über das Programm wirft "NullPointerException". Für die Frage, die Sie gefragt, seine Antwort-Felder können nicht überschrieben werden. Wenn Sie definieren, die gleichen Feldnamen in der Unterklasse dann Unterklasse Feld verstecken super-Klasse-Feld.
ja, weil in der GenericContainer ich habe nicht initialisiert Generischer Kind. auf meinem komplette Projekt gearbeitet.

InformationsquelleAutor Alex | 2013-03-09

Schreibe einen Kommentar