Java является объектно-ориентированным языком программирования?
Что проверяют
Вопрос звучит как «да или нет», но проверяют другое: назовёте ли вы принципы своими словами и заметите ли, что Java объектно-ориентированный язык не в чистом виде.
Как отвечать
Да, Java объектно-ориентированный язык: код организован вокруг классов и объектов, и все четыре принципа поддержаны языком.
- инкапсуляция: состояние закрыто модификаторами доступа, наружу торчат только методы. Смысл не в геттерах, а в том, что объект отвечает за свои инварианты;
- наследование:
extendsдля классов,implementsдля интерфейсов. Множественного наследования классов нет, есть множественная реализация интерфейсов; - полиморфизм: вызов метода по ссылке на базовый тип уходит в реализацию конкретного класса. Отдельно стоит упомянуть перегрузку, которая разрешается на этапе компиляции, тогда как переопределение на этапе выполнения;
- абстракция: интерфейсы и абстрактные классы описывают, что делает объект, не раскрывая как.
Сильный ответ добавляет оговорку: чистым объектно-ориентированным Java назвать нельзя. В языке есть примитивные типы, которые объектами не являются, есть статические члены, живущие вне экземпляров, а с восьмой версии добавились функциональные интерфейсы и лямбды, то есть элементы функционального стиля. Поэтому корректная формулировка звучит так: Java преимущественно объектно-ориентированный язык с мультипарадигменными возможностями.
Где спотыкаются
Перечисляют принципы наизусть, но не могут привести пример из своего кода.
Путают полиморфизм с перегрузкой методов.
Говорят «в Java всё есть объект». Это про Ruby или Smalltalk, а в Java есть int, double и остальные примитивы, для которых существуют классы-обёртки и автоупаковка.