Cześć. Będę bardzo wdzięczny za przybliżenie następującej kwestii:
Mamy dwie klasy:
public class Pies {
public void f(){
}
}
public class Lampo extends Pies {
public int waga = 30;
public void f(){
System.out.println(waga);
}
}
oraz metode main:
public static void main(String[] args) {
Pies lampo = new Lampo();
System.out.println(lampo.getClass());
lampo.f();
System.out.println(lampo.waga); // wyskoczy blad:
}
}
metoda get.Class() pokazuje, ze lampo to obiekt typu Lampo.
Dlaczego wiec nie moge korzystac z jego pola, a moge korzystac z jego metody(ktora
wykorzystuje jego pole)? Czytalem cos, ze niby ten obiekt ma typ Pies a stan
aktualny Lampo, czy jakos podobnie... ale czy ktos moglby powiedziec, co tam sie
naprawde dzieje? Dlaczego mam dostep do metod nadpisywanych, ktore wykorzystuja
pola podklasy, do ktorych normalnie nie mam dostepu (przez lampo.waga)? A jednoczesnie,
dlaczego gdy usune metode f z klasy Pies, rowniez nie bede mogl wywolac lampo.f();?