Witam, mam rozterkę na temat polimorfizmu w javie i nie do końca rozumiem co się dzieje. Może ktoś będzie łaskaw odpowiedzieć na pytanie: dlaczego? Przejdźmy do rzeczy:
- Zakładam klasę figura z jedną metodą:
public class Figura {
void malujNaZielono(){
System.out.println("Maluje figure na zielono");
}
}
- Zakładam 2 klasy Kolo i Kwadrat rozszerzające klasę Figura. Te klasy także posiadają jedną prostą metodę:
public class Kolo extends Figura {
void liczPole(){
System.out.println("Licze pole kola");
}
}
i analogicznie
public class Kwadrat extends Figura {
void liczPole(){
System.out.println("Licze pole kwadratu");
}
}
- Zakladam klase testowa i tworzę obiekty kolo i kwadrat które także są figurami.
public class TestClass {
public static void main(String[] args) {
Figura fig1 = new Kolo();
Figura fig2 = new Kwadrat();
}
}
I teraz pytanie : dlaczego jeśli użyje takiego zapisu Figura fig1 = new Kolo(); będę miał dostęp do metody z klasy Kolo natomiast nie będę miał dostępu do metody z klasy Figura? (analogicznie przy Kwadracie). Przecież zarówno Kolo jak i Kwadrat są podtypami typu Figura? Rozumiem dlaczego tworząc takie obiekty: Kolo fig1 = new Kolo(); i Kwadrat fig2 = new Kwadrat(); będę miał dostęp do wszystkich metod, ale nie rozumiem dlaczego nie ma dostępu do metod z Figura skoro obiekty podtypu Kolo i Kwadrat pochodzą z klas dziedziczących po Figura (Kolo i Kwadrat są przecież figurami?) Może ktoś to wytłumaczyć łopatologicznie jak dla debila ? ehhhhh fuck :-D