Po co w ogóle piszemy to pierwsze słowo "Person"? Jaka jego logika?
To wynika z braku tzw. type inference
, przynajmniej w starszych wersjach Javy, bo ostatnio chyba w końcu wprowadzili jakąś tam namiastkę inferencji typów - dlatego trzeba wprost definiować typ definiowanej zmiennej.
Różne języki w różnym stopniu to wspierają - niektóre wcale, inne dopiero od niedawna, jedne pozwalają jej używać właściwie dowolnie, inne w mniej lub bardziej ograniczonym zakresie. W niektórych od zarania dziejów typy w ogóle są traktowane bardzo liberalnie, że tak to ujmę, a w innych niby jest dynamiczne typowanie, ale weszły do języka tzw. type hints które pozwalają doprecyzować np. typ zmiennej czy parametru, jeśli ktoś czuje taką potrzebę.
Tak czy owak, kompilator chce znać typ definiowanej zmiennej, by wiedzieć, do jakiego typu obiektów może się ta zmienna odnosić - bez wprost zdefiniowanego typu albo nie będzie tego w ogóle wiedział, albo domyśli się (inferencja typów), ale jego domysły mogą nie być zgodne z intencją programisty - bo programista mógłby na przykład chcieć, by zmienna była typu interfejsu albo jakiejś klasy nadrzędnej.