если у меня есть:
class Zero {
int n = 0;
void setN(int x) {
n += x;
}
}
class One extends Zero {
int n = 1;
void setN(int x) {
n += x;
super.setN(x);
}
}
class Two extends One {
int n = 2;
void setN(int x) {
n += x;
super.setN(x);
}
void show() {
System.out.println(n);
System.out.println(super.n);
// System.out.println(super.super.n); error
}
public static void main(String[] args) {
Two two = new Two();
two.show();
// >>>
// 2
// 1
two.setN(1);
two.show();
// >>>
// 3
// 2
}
}
Я отредактировал его с помощью метода setN
передать от Zero
.Это сработало, значит ли это, что я все еще могу «изменить» n
в Zero
, но я просто не увижу его?
Также очень интересно, чтохотя setN
точно так же в One
и Two
, я должен вручную переопределить его, если я удаляю setN
в Two
, это будет вести себя по-другому.setN
не изменится n
в Two
.
Кажется, что super
может пройти только на один уровень выше?Можно ли в любом случае вызвать n
в нуле?
Но другой вопрос заключается в том, что, если я намеревался переопределить int n
в подклассе, почему это вообще позволяет мне посещать n
в родительском?
Спасибо,