Вызов конструктора Java и изменение значений переменных экземпляра родительского класса - PullRequest
0 голосов
/ 23 октября 2019
public class Pparent{
    int p;
}

public class Raw1 extends Pparent {
    int c;
    Raw1(int c, int p){
        this.c = c;
        this.p = p;//
        System.out.println(this.p);
        System.out.println(this.c);
        System.out.println(super.p);
        //super.p = p;//
        System.out.println(this.p);
    // so can we say that only reference of parent class is getting inside child class
    }

    public static void main(String[] args) {
        Raw1 rrr = new Raw1(1,20);
        Pparent ppp = new Pparent();
        System.out.println(ppp.p);
        System.out.println(rrr.p);

    }

}

здесь, в третьей строке, когда я печатаю значение переменной super.p, она печатается как 20. но я не инициализирую значение super.p, я просто инициализировал значение this.p, поэтомуя должен получить значение как 0, но я получаю значение как 20. кто-нибудь может объяснить, пожалуйста, как !!! 1

Ответы [ 2 ]

1 голос
/ 23 октября 2019
this.p = p;

инициализирует значение переменной экземпляра p класса *, поскольку дочерний класс Raw1 не имеет переменной экземпляра p, которая скрывает переменную родительского класса, а переменная родительского класса доступна длядочерний класс, поскольку по умолчанию он является закрытым пакетом.

Если вы измените доступ к переменной p на private, ваш код не пройдет компиляцию.

0 голосов
/ 23 октября 2019

Ваш атрибут p имеет уровень доступа по умолчанию. Поэтому, когда вы вызываете дочерний конструктор, вы устанавливаете свойство напрямую.

...