2017-03-25 3 views
1

Ich lerne Java Vererbung und Kapselung. Hier ist BeispielcodeJava Super-Set private Felder

class Base { 
    private int x; 
    private int y; 

    Base(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    public int getX() { 
     return x; 
    } 

    public int getY() { 
     return y; 
    } 
} 

class Child extends Base { 
    Child(int x, int y) { 
    super(x, y); 
    } 
} 

Child c = new Child(1, 2); 
System.out.println(c.getX()); 

Warum habe ich Zugriff auf x und y (privat) in Child Klasse? Ändert super etwas?

+3

Sie don Ich habe keinen (direkten) Zugriff auf x und y, aber Sie haben 'public'-Methoden innerhalb der Base-Klasse erstellt, die von der Child-Klasse geerbt werden und somit x und y zugänglich machen. –

Antwort

1

Sie haben keinen Zugriff auf x und y in Child Klasse. Wenn Sie

Child(int x, int y) { 
    super(x, y); 
} 

die x und y sind formale Parameter von Child ‚s Konstruktor schreiben, dass die gleichen Namen wie private Felder x und y der Oberklasse aufgerufen werden passieren. Sie könnten auch etwas anderes genannt werden - sagen, a und b, und die Wirkung wäre genau das gleiche:

Child(int a, int b) { 
    super(a, b); 
} 
0

Warum habe ich Zugriff auf x und y (privat) in der Kinderklasse?

Sie nicht, wenn Sie möchten Sie problemlos tun können:

System.out.println(c.x); 
System.out.println(c.y); 

Sie schrieb stattdessen öffentliche Setter/Getter, die Sie Zugriff (Einkapselung) auf die Felder geben ..