Почему Java считается объектно-ориентированным языком программирования?

«Почему Java считается объектно-ориентированным языком программирования?» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Java построена вокруг четырёх основных принципов объектно-ориентированного программирования (ООП), которые пронизывают всю её архитектуру:

  1. Инкапсуляция: Механизм сокрытия внутреннего состояния объекта и предоставления контролируемого доступа через публичные методы. Реализуется с помощью модификаторов доступа (private, protected, public).
  2. Наследование: Возможность создания нового класса на основе существующего, что позволяет переиспользовать код и выстраивать иерархии. Ключевое слово extends.
  3. Полиморфизм: Способность объектов с одинаковой спецификацией (интерфейсом или родительским классом) иметь различную реализацию. Достигается через переопределение методов (@Override) и ссылки на интерфейсы.
  4. Абстракция: Процесс выделения существенных характеристик объекта и игнорирования несущественных. Реализуется с помощью абстрактных классов (abstract class) и интерфейсов (interface).

Пример, демонстрирующий все принципы:

// Абстракция и Инкапсуляция
abstract class Vehicle {
    private String model; // Инкапсуляция: поле скрыто
    public Vehicle(String model) { this.model = model; }
    public String getModel() { return model; } // Контролируемый доступ
    abstract void move(); // Абстракция: обязательный контракт
}

// Наследование
class Car extends Vehicle {
    public Car(String model) { super(model); }
    // Полиморфизм: конкретная реализация абстрактного метода
    @Override
    void move() {
        System.out.println(getModel() + " едет по дороге.");
    }
}

class Boat extends Vehicle {
    public Boat(String model) { super(model); }
    @Override
    void move() {
        System.out.println(getModel() + " плывёт по воде.");
    }
}

// Использование полиморфизма
public class Main {
    public static void main(String[] args) {
        Vehicle myCar = new Car("Toyota");
        Vehicle myBoat = new Boat("Yamaha");
        myCar.move(); // Toyota едет по дороге.
        myBoat.move(); // Yamaha плывёт по воде.
    }
}

Почти вся стандартная библиотека Java построена на классах и объектах, что подтверждает её ООП-природу.