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