У меня есть эта задача, и я не могу понять, как ее решить: «Измените все три x-переменных, связанных с классом C».Изменить переменные экземпляра суперкласса из подкласса
class A {
public int x;
}
class B extends A {
public int x;
}
class C extends B {
public int x;
public void test() {
//There are two ways to put x in C from the method test():
x = 10;
this.x = 20;
//There are to ways to put x in B from the method test():
---- //Let's call this Bx1 for good measure.
---- //Bx2
//There is one way to put x in A from the method test();
---- //Ax1
}
}
Чтобы проверить, я создал это:
public class test {
public static void main(String[] args)
{
C c1=new C();
c1.test();
System.out.println(c1.x);
B b1=new B();
System.out.println(b1.x);
A a1=new A();
System.out.println(a1.x);
}
}
Что дает 20, 0, 0.
Теперь я понял, что я мог бы написать Bx1
так:
super.x=10;
Это изменило бы x
в B
, но я не мог понять как назвать это в моем test.java
.
Как вы получаете Bx1
, Bx2
, Ax1
, и как вы называете их для теста?
Связанный: http://stackoverflow.com/questions/427756/overriding-a-super-class-instance-variables –
@RahulTripathi я предполагаю, что он знает, что он не переопределяет их, так как он говорит об изменении всех трех членов 'x'. – SomeJavaGuy
«Bx1, Bx2» - нет двух x в B. Но самое главное, если вы не столкнулись с крайним краем (о чем я не могу думать) - вы не должны так поступать. В большинстве случаев необходимость вмешательства в переменную класса родителя подразумевает плохой дизайн. – alfasin