Więc testowałem z niektórymi fragmentami kodu, aby objąć moją głowę pojęciem dziedziczenia, gdy natknąłem się na to - dla mnie - dziwne zjawisko.Dlaczego zmiana typu prowadzi do innego użycia członków?
więc najpierw testował ten prosty kod:
public class Main{
public static void main(String[] args) {
Bar bar = new Bar();
System.out.println("age = " + bar.age);
bar.test();
}
}
class Foo{
int age = 2;
void test(){
System.out.println("TEST FOO");
}
}
class Bar extends Foo{
int age = 4;
void test(){
System.out.println("TEST BAR");
}
}
a wyjście było jak się spodziewałem:
age = 4
TEST BAR
Potem zrobiłem małą zmianę do linii 3, w którym zmieniłem typ Bar
do Foo
tak:
Foo bar = new Bar();
teraz gdy uruchamiam dorsza e, to daje mi wyjście wierzę jest dziwne:
age = 2
TEST BAR
Jak to się dzieje, że kod bar.age
jest teraz za pomocą członu age
klasy Foo
(co ma sens), natomiast bar.test();
nadal wykorzystuje metodę klasa Bar
(a nie z Foo, ponieważ taki jest typ)?
https://stackoverflow.com/questions/12589274/slight-confusion-regioning-overriding-where-variables-are-con-eded lub https://stackoverflow.com/questions/10722110/overriding-member-variables-in -java –
@RC. Interesujące lektury tego szukały. Dzięki. – moffeltje
Oprócz aspektu technicznego: robi to ** nie ** OOP, ponieważ narusza najważniejszą zasadę OO: * ukrywanie informacji/enkapsulacja *. –