У меня возникли некоторые проблемы с наследованием на Java. Я не понимаю, почему следующие две программы имеют эти выходы! Может ли кто-нибудь мне помочь? :)Java - проблемы с пониманием наследования
1)
public class A {
int foo() {
return 1;
}
}
public class B extends A {
int foo() {
return 2;
}
}
public class C extends B {
int bar(A a) {
return a.foo();
}
}
C x = new C();
System.out.println(x.bar(x));
// OUTPUT:2
2)
public class A {
int e=1;
}
public class B extends A {
int e=2;
}
public class C extends B {
int bar(A a){
return a.e;
}
}
C x= new C();
System.out.println(x.bar(x));
// OUTPUT:1
Вы ошибаетесь в отношении примера 2 - там есть «1». Класс B имеет свой собственный элемент e, который скрыт для снаружи. Если бы B не имел члена e, а установил для него значение, мы получили бы результат «2», но это не так, мы читаем значение члена класса A –
Hm, с вашей логикой ответ во второй программе было бы 2, не так ли? – Johanna
@Johanna Вопрос для меня? –