← Назад к вопросам

Какие знаешь особенности ООП?

1.0 Junior🔥 241 комментариев
#ООП#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные особенности ООП (объектно-ориентированного программирования)

ООП — это парадигма программирования, которая основана на концепции объектов и классов. Java является классическим объектно-ориентированным языком, и понимание основных принципов ООП критично для разработчика.

Четыре столпа ООП

1. Инкапсуляция

Инкапсуляция — это скрытие внутренней реализации объекта и предоставление доступа только через публичный интерфейс.

public class BankAccount {
    private double balance;  // скрытое поле
    
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }
    
    public double getBalance() {
        return balance;
    }
}

Преимущества:

  • Контроль доступа — защита от неправильного использования
  • Изменение реализации без влияния на код, который использует класс
  • Валидация данных при установке значений
  • Сокрытие деталей реализации

2. Наследование

Наследование — это механизм, который позволяет классу унаследовать свойства и методы другого класса.

class Animal {
    public void makeSound() {
        System.out.println("Sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Woof!");
    }
}

Характеристики:

  • Переиспользование кода — не дублируем общую логику
  • Иерархия классов — создание отношений "is-a"
  • Однократное наследование в Java — класс может наследовать только от одного другого класса
  • Множественное наследование через интерфейсы
  • Модификатор super для вызова методов родителя

3. Полиморфизм

Полиморфизм — это способность объектов принимать разные формы. В Java есть два вида полиморфизма:

Полиморфизм времени компиляции (перегрузка методов)

class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
    
    public double add(double a, double b) {
        return a + b;
    }
}

Полиморфизм времени выполнения (переопределение методов)

Animal animal = new Dog(); // Ссылка на Animal, объект Dog
animal.makeSound(); // вызовет Dog.makeSound(), не Animal.makeSound()

Преимущества:

  • Гибкость — один метод может работать с разными типами
  • Расширяемость — легко добавлять новые классы
  • Слабая связанность — код зависит от абстракции, не от конкретики

4. Абстракция

Абстракция — это скрытие сложности и предоставление только существенных деталей.

abstract class Shape {
    abstract double getArea();
}

class Circle extends Shape {
    private double radius;
    
    @Override
    double getArea() {
        return Math.PI * radius * radius;
    }
}

Характеристики:

  • Абстрактные классы — не могут быть инстанцированы
  • Абстрактные методы — должны быть реализованы в подклассах
  • Интерфейсы — полная абстракция (все методы абстрактные)
  • Договор (контракт) между классами

SOLID принципы (расширение ООП)

  • S — Single Responsibility — класс имеет одну причину для изменения
  • O — Open/Closed — открыт для расширения, закрыт для модификации
  • L — Liskov Substitution — подтипы могут заменять свои базовые типы
  • I — Interface Segregation — много узких интерфейсов, чем один общий
  • D — Dependency Inversion — зависи от абстракций, не от конкретики

Различие между классом и объектом

  • Класс — это шаблон, чертёж, тип данных
  • Объект — это экземпляр класса, конкретное значение
String name = "Java"; // name — объект класса String

Ключевые модификаторы доступа

МодификаторКлассПакетПодклассМир
private
(package)
protected
public

ООП позволяет написать чистый, поддерживаемый и расширяемый код через правильное использование инкапсуляции, наследования, полиморфизма и абстракции.