Описание и примеры наследования в Java

Описание и примеры наследования в Java фото
Tatyana Milkina
Автор: Tatyana Milkina

Наследование в Java — это один из ключевых принципов объектно-ориентированного программирования (ООП). С помощью ключевого слова extends один класс может наследовать поля и методы другого класса, что позволяет повторно использовать код и строить гибкую архитектуру приложений.

В этой статье вы разберёте, что такое наследование в Java, как работает extends, и увидите практические примеры.

  1. Что такое наследование и extends?
  2. Доступ к членам класса
  3. Ссылки на подклассы
  4. Многоуровневое наследование
  5. Порядок вызова конструкторов

1. Что такое наследование в Java и ключевое слово extends?

Рассмотрим базовый класс, описывающий коробку:

public class Box6 {
    double width;
    double height;
    double depth;

    Box6(double w, double h, double d) {
        width = w;
        height = h;
        depth = d;
    }

    public Box6() {}

    double getVolume() {
        return width * height * depth;
    }
}

Представим, что нужно добавить новые типы коробок: ColorBox (с цветом) и HeavyBox (с весом). Без наследования пришлось бы дублировать код.

Наследование в Java решает эту проблему: можно создать базовый класс Box6 и расширить его в других классах.

В Java:

  • суперкласс (superclass) — базовый класс
  • подкласс (subclass) — наследник

Связь называется IS-A (является). Например: ColorBox — это Box.

Синтаксис:

class Подкласс extends Суперкласс {
    // тело класса
}

Пример:

public class ColorBox extends Box6 {
    String color;

    public ColorBox(int width, int height, int depth, String color) {
        this.width = width;
        this.height = height;
        this.depth = depth;
        this.color = color;
    }
}
public class HeavyBox extends Box6 {
    int weight;

    public HeavyBox(int width, int height, int depth, int weight) {
        this.width = width;
        this.height = height;
        this.depth = depth;
        this.weight = weight;
    }
}

Оба класса наследуют поля и методы Box6.

Подробнее можно ознакомиться в Наследование (программирование).

2. Доступ к членам класса и наследование

Подкласс наследует все члены, но доступ зависит от модификаторов:

  • public — доступен везде
  • protected — доступен в наследниках
  • default — доступен в пакете
  • private — недоступен в подклассе
public class A {
    public int value1;
    private int value2;
}

Доступ к private полям возможен только через геттеры:

public class B extends A {
    public int sum() {
        return value1 + getValue2();
    }
}

3. Суперкласс может ссылаться на объект подкласса

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

Box6 box = new HeavyBox(15, 10, 20, 5);

Это называется upcasting и используется в полиморфизме.

Обратное невозможно:

// Ошибка компиляции
// HeavyBox box = new Box6();

Важно: доступные поля определяются типом переменной, а не объектом.

4. Многоуровневое наследование в Java

Java поддерживает несколько уровней наследования:

public class Shipment extends HeavyBox {
    double cost;

    public Shipment(int w, int h, int d, int weight, double cost) {
        super(w, h, d, weight);
        this.cost = cost;
    }
}

Иерархия:

  • Box6 → HeavyBox → Shipment

Подкласс получает доступ ко всем полям на каждом уровне.

5. Порядок вызова конструкторов

Конструкторы вызываются сверху вниз — от суперкласса к подклассу:

class E {
    E() { System.out.println("E"); }
}

class F extends E {
    F() { System.out.println("F"); }
}

class G extends F {
    G() { System.out.println("G"); }
}

Результат:

E
F
G

Частые ошибки

  • Попытка доступа к private полям
  • Путаница между типом ссылки и объектом
  • Неправильное использование extends
  • Злоупотребление наследованием вместо композиции

FAQ по наследованию в Java

Что такое наследование в Java?

Это механизм, позволяющий одному классу использовать код другого класса.

Что делает extends?

Создаёт подкласс на основе суперкласса.

Есть ли множественное наследование?

Нет, но оно реализуется через интерфейсы.

Зачем нужно наследование?

Для повторного использования кода и построения архитектуры.

Вывод

Наследование в Java — фундаментальная тема ООП. Понимание extends и иерархий классов помогает писать чистый, масштабируемый и поддерживаемый код.

Курс 'Java для начинающих' на Udemy Курс 'Java для начинающих' на Udemy
Читайте также:
Комментарии