2016-06-27 12 views
-1

Hier ist ein einfaches Beispiel, in dem ich die Klasseneigenschaft vererbe.Child-Klassenobjekt in Parent-Referenz Zugriff auf Parents-Variable

class Xyz 
{ 
    int a = 10; 
} 

public class Demo extends Xyz 
{ 
    int a = 5; 

    public static void main(String[] args) 
    { 

     Xyz z = new Demo(); 
     System.out.println(z.a); 
    } 

} 

Da das Objekt der Klasse ist Demo ist 5 gedruckt werden soll, aber der Ausgang ist 10. Was ist der Grund dafür?

Antwort

2

Für Variablen in Java, Variablen sind nur über ihre Referenzvariable zugänglich, nicht über das Objekt.

Xyz z // z is the reference variable of Xyz so it will print 10 instead of 5. 



Xyz z = new Demo(); // override concept only works for Method not for Variables 

eine weitere Verwirrung kann aufgrund von überschreiben erhöhen. Sie sollten jedoch verstehen, dass das Überschreiben nur im Kontext von "Methode nicht für Variablen" stattfindet.

Achten Sie also darauf, dass der Ausgang korrekt ist. Es sollte 10 sein, anstatt 5.

Danke

0

Wenn Sie Elementvariablen eines Objekts accesing, greifen Sie immer die Variablen des Typs das Objekt mit deklariert.

Kommentieren Sie int a = 10; in Ihrer Basisklasse Xyz. Ihr Code kompiliert nicht mehr ...

Dies unterscheidet sich für Methoden, die von virtuellen Standard sind (es sei denn privat):

class Xyz 
{ 
    int m() 
    { 
     return 10; 
    } 
} 

public class Main extends Xyz 
{ 
    int m() 
    { 
     return 5; 
    } 

    public static void main(String[] args) 
    { 
     Xyz z = new Main(); 
     System.out.println(z.m()); 
    } 
} 

Also, wenn Sie wollen, oder sogar auf ein solches Verhalten, wie Sie verlassen ursprünglich erwartet, machen Sie Ihre Mitglied Variablen privat und bieten sie Getters und – wenn – Setter (natürlich müssen Sie diese in Ihrer Unterklasse überschreiben!).

0

Was Sie wirklich tun, ist Xyz Object zu erstellen, so dass der Verweis auf Integer a nach Xyz ist.

Wenn Sie den Wert der Mutterklasse ändern möchten, sollten Sie Super Zugang und Änderung der Eltern Wert nennen

so etwas wie dieses

class Xyz 
{ 
    int a = 10; 
} 

public class Demo extends Xyz 
{ 

    public Demo(){ 
     super.a = 5; 
    } 

    public static void main(String[] args) 
    { 

     Xyz z = new Demo(); 
     System.out.println(z.a); // 5 is printed 
    } 

}