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

Что такое Override в Java?

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

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

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

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

# Override в Java

Override (переопределение) — это механизм объектно-ориентированного программирования, который позволяет подклассу предоставить собственную реализацию метода, уже определённого в суперклассе (родительском классе). Это ключевая концепция полиморфизма в Java.

Основные концепции

Овваррайдинг позволяет:

  • Заменить реализацию метода родителя в наследующем классе
  • Сохранить сигнатуру метода (имя и параметры)
  • Использовать одного и того же ссылку на объект для вызова разных реализаций

Правила Override

Сигнатура метода

Метод-переопределитель должен иметь точно такую же сигнатуру:

public class Animal {
    public void sound() {
        System.out.println("Some sound");
    }
}

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

Модификаторы доступа

Модификатор доступа переопределяемого метода должен быть таким же или более открытым:

// Правильно
public void method() {}
@Override
public void method() {}  // public остаётся public

// Неправильно
public void method() {}
@Override
protected void method() {}  // protected < public (ошибка)

Возвращаемый тип

Возвращаемый тип может быть коварианты (подтип возвращаемого типа родителя):

public class Parent {
    public Animal getAnimal() {
        return new Animal();
    }
}

public class Child extends Parent {
    @Override
    public Dog getAnimal() {  // Dog extends Animal OK
        return new Dog();
    }
}

Аннотация @Override

Аннотация помогает компилятору проверить корректность переопределения:

public class Parent {
    public void display() {
        System.out.println("Parent");
    }
}

public class Child extends Parent {
    @Override
    public void display() {
        System.out.println("Child");
    }
}

Если указать неверную сигнатуру, компилятор выдаст ошибку.

Полиморфизм и Override

Основное преимущество override — полиморфизм во время выполнения:

Animal dog = new Dog();
Animal cat = new Cat();

dog.sound();  // Выведет Woof Вызовется Dog.sound()
cat.sound();  // Выведет Meow Вызовется Cat.sound()

Вызов метода определяется типом объекта во время выполнения, а не типом ссылки.

Различие между Override и Overload

  • Override: переопределение метода с той же сигнатурой в подклассе
  • Overload: несколько методов с одним именем, но разными параметрами в одном классе

Методы, которые нельзя Override

  1. Приватные методы (private) — не доступны подклассам
  2. Статические методы (static) — при переопределении происходит скрытие, а не override
  3. Финальные методы (final) — запрещены для переопределения
  4. Методы final классов — в final классах переопределение невозможно

Практический пример

public abstract class PaymentProcessor {
    public abstract void process(double amount);
    public void logTransaction(String details) {
        System.out.println("Log: " + details);
    }
}

public class CreditCardProcessor extends PaymentProcessor {
    @Override
    public void process(double amount) {
        System.out.println("Processing credit card: " + amount);
        logTransaction("Credit card: " + amount);
    }
}

public class PayPalProcessor extends PaymentProcessor {
    @Override
    public void process(double amount) {
        System.out.println("Processing PayPal: " + amount);
        logTransaction("PayPal: " + amount);
    }
}

Override — фундаментальная концепция для создания гибкого и расширяемого кода через полиморфизм.

Что такое Override в Java? | PrepBro