Я пытаюсь получить доступ к переменной дочернего класса с помощью метода родителя с помощью метода ключевого слова внутри. но его не печатает значение дочернего элемента, когда метод был вызван объектом ребенка. Вместо этого он печатает значение родительского класса, даже если этот метод был вызван дочерним объектом.«this» Ключевое слово не имеет доступа к Предполагаемая переменная, которую он должен. Зачем?
Вот мой код:
class C {
int t = 9;
void disp() {
// here 'this' shows to which object its referring.
// It showed me same as System.out.println(b) showed me
System.out.println(this);
/*
But, why this.t is printing 9,
when this method is called by 'b' reference variable,
it should print 0, because B class contains instance variable t
of its own and here this is pointing to the object of B class,
it shows 9 for 'c' and 1 for 'c1' but y not similarly 0 for 'b'
as when the method is called by 'b',
***this refers to the memory location of b but doesn't prints the value of that object***,
hows that going on???
*/
System.out.println(this.t);
}
}
class B extends C {
int t = 0;
}
class A {
public static void main(String args[]) {
C c = new C();
C c1 = new C();
B b = new B();
c1.t = 1;
System.out.println("Memory location of c-->" + c);
c.disp(); // here output is 9
c1.disp(); //here output is 1
System.out.println("Memory location of b-->" + b);
b.disp();
}
}
Выход:
c-->[email protected]
[email protected]
9
[email protected]
1
b-->[email protected]
[email protected]
9
Вы не можете переопределить поля, только спрячьте их. То есть любой код родителя, который смотрит в поле, всегда будет обращаться к полю родителя, а не к дочернему полю. – RealSkeptic
Подсказка: вы хотите, чтобы мы провели время, чтобы помочь вам. Поэтому вы делаете это как можно проще; начиная с использования функции «предварительного просмотра», чтобы гарантировать, что ваш исходный код будет отформатирован с соблюдением конфиденциальности. Кроме того; Я действительно не понимаю ваш вопрос. – GhostCat