Совокупность всей информации о типах в любой конкретный момент называется состоянием типов стека; именно его Java анализирует перед запуском приложения. Java ничего не знает о фактических значениях, хранящихся в стеке и в переменных; известны только их типы. Однако этой информации достаточно для соблюдения правил безопасности и для уверенности в том, что с объектами не будут выполняться некорректные операции.
Одно дело — создать язык, который мешает вам «выстрелить себе в ногу», и совсем другое — создать язык, который помешает кому-то другому «выстрелить вам в ногу».
Начиная с Java 7, компилятору хватает сообразительности, чтобы определить тип инициализирующего выражения по типу той переменной, которой присваивается значение. Это называется выведением типа, или автоматическим определением обобщенного типа (generic type inference). Как показано в нашем примере, при сокращенной записи в правой части объявления переменной достаточно пустых угловых скобок: <>.
Типы интерфейсов очень похожи на типы классов. Вы можете объявить переменную с типом интерфейса; вы можете объявить аргументы методов с типами интерфейсов; вы можете указать, что возвращаемый тип метода является типом интерфейса
В отличие от расширения абстрактного класса, класс, реализующий интерфейс, не обязан наследовать от какой-то конкретной части иерархии наследования или использовать конкретную реализацию.
создать группу абстрактных методов, определяющих некоторое поведение объекта без привязки к какой-либо реализации. В Java эта концепция называется интерфейсом
. Переопределение методов для изменения поведения (логики работы) объектов называется полиморфизмом подтипов. Именно этот механизм обычно имеют в виду, когда говорят о мощи объектно-ориентированных языков.