podtypowanie Object

0

Czołem wszystkim. Czy ktoś mnie wyjaśni w jaki sposób to działa?:

 
public class Program {

	public static void main(String[] args) {
		Integer liczba = 15;
		
		Object ala = liczba;
		System.out.println(ala);
	}

}

Wynik to oczywiście liczba 15. Podtypowanie na obiekt to praktyka nagminna przed typami sparametryzowanymi (generics (dzięki ci za nie Panie)) no i ok, ALE zgodnie z zasadami polimorfizmu klasa bazowa "widzi" podczas przypisania tylko metody i pola klasy pochodnej jeżeli sama je posiada. Podczas przypisania referencji w metodę bazową są "wtłaczane" dane z odpowiednich pól metody pochodnej.
Jeżeli klasa Object nie ma pola przechowującego typ danych z klasy pochodnej (w tym wypadku int(eger), ale może to być dowolny typ danych zwracany przez dowolną klasę) w jaki sposób jest w stanie obsłużyć to zagadnienie i zwrócić wartość?
Szukałem odpowiedzi na to zgoła filozoficzne zagadnienie w książce H. Shildta, w wielu dobrych kursach internetowych, wikipedii, a nawet w dokumentacji javy na stronie oracle i nic nie znalazłem, co może sugerować, że odpowiedź jest tak banalna i oczywista, że nikt nie zaprząta sobie tym głowy? Jak to działa??

2
  1. Skąd ty bierzesz takie słownictwo? Jakie "podtypowanie"? o_O
  2. Niestety ale nic nie rozumiesz, a to co napisałes to bełkot i bzdury. Rzutowanie obiektów w javie wygląda tak jak rzutowanie referencji/wskaźników w C++, nie jak rzutowanie obiektów. W C++ rzutowanie obiektu typu pochodnego na klasę bazową dokonuje tzw. slicingu, czyli obcina obiekt pochodny z wszystkich elementów których nie ma obiekt bazowy. Ale w javie takiego mechanizmu nie ma! W javie pracujesz zawsze na referencjach/wskaźnikach do obiektów i w efekcie takie rzutowanie sprawia tylko że "widzisz" dany obiekt jako obiekt bazowy, ale obiekt jako taki nie zostaje zmodyfikowany, tzn nadal ma swoje wszystkie metody oraz pola.

1 użytkowników online, w tym zalogowanych: 0, gości: 1