Java статически и явно напечатано.
Тип переменной может отличаться от типа значения, которое она содержит, из-за наследования. Например:
Animal dog = new Dog();
Здесь тип переменной dog
равен Animal
, но значение, которое она содержит, является ссылкой на экземпляр Dog
.
Теперь в некоторых других языках (C # 3 является очевидным примером в качестве ближайшего соседа Java) вы можете использовать неявно типизированные локальные переменные , когда вы действительно хотите, чтобы тип локальной переменной был таким же, как тип выражения, использованного для его инициализации:
var dog = new Dog(); // Equivalent to Dog dog = new Dog();
(Возможности вывода типов некоторых других статически типизированных языков выходят далеко за рамки этого.)
Итак, чтобы вернуться к исходному вопросу, ответ:
- Переменная
dog
имеет тип, который известен во время компиляции; это не так в PHP
- Тип переменной должен быть явно указан в Java; это связано со статической типизацией, но не является требованием статической типизации