Зарегистрируйтесь, чтобы продолжить обучение

Наследование Java: ООП

В Java наследование позволяет создавать новые классы на основе существующих, что упрощает процесс разработки и повторного использования кода. Класс наследник наследует все поля и методы класса родителя и может также добавлять новые поля и методы или переопределять существующие

Синтаксис

В Java наследование реализуется с помощью ключевого слова extends, которое позволяет одному классу наследовать свойства и методы другого класса

@Getter
@Setter
@AllArgsConstructor
public class Person {
    private String name;
    private String surname;
    private int age;
}

В Java ключевое слово super используется для обращения к классу родителю из класса наследника. Оно позволяет вызывать методы родительского класса. Например, если в классе наследнике переопределен метод, то с помощью super можно вызвать исходный метод класса родителя

//Класс-наследник "Студент"
public class Student extends Person {

    public int semesterNumber;

    public Student(String name, String surname, int age, int semesterNumber) {
        super (name, surname, age);
        this.semesterNumber = semesterNumber;
    }
}

//Класс-наследник "Сотрудник"
public class Employee extends Person {
    public String title;

    public Employee(String name, String surname, int age, String title) {
        super (name, surname, age);
        this.title = title;
    }

    public String getName() {
        return super.getName();
    }
}
public class Main {

    public static void main(String() args) {
        var student = new Student;
        System.out.println(student.getName());
    }
}

Абстрактные классы

В Java абстрактные классы используются для определения общих свойств и методов, которые могут быть унаследованы другими классами. Абстрактный класс объявляется с помощью ключевого слова abstract и может содержать как абстрактные, так и неабстрактные методы, а также поля. Абстрактные классы не могут быть инстанцированы самостоятельно и предназначены для использования в качестве базовых классов для других классов

@Getter
@Setter
@AllArgsConstructor
public abstract class Person {
    private String name;
    private String surname;
    private int age;

    public abstract int getSalary();
}

@Getter
public class Student extends Person {

    public int semesterNumber;

    public Student(String name, String surname, int age, int semesterNumber) {
        super (name, surname, age);
        this.semesterNumber = semesterNumber;
    }

    public int getSalary() {
        return 2000;
    }
}

@Getter
public class Employee extends Person {
    public String title;

    public Employee(String name, String surname, int age, String title) {
        super (name, surname, age);
        this.title = title;
    }

    public int getSalary() {
        return 25000 + getAge() * 1000;
    }
}
public class Main {

    public static int getTotalSalary(List<Person> people) {
        int result = 0;

        for (Person person : people) {
            result += person.getSalary();
        }
    }
}

Не наследуемые классы

Ключевое слово final в Java используется для обозначения неизменяемости. Оно может применяться к переменным, методам и классам. Это позволяет создавать более безопасный и предсказуемый код, предотвращая нежелательные изменения и расширения Если переменная объявлена как final, ее значение нельзя изменить после инициализации. Если метод объявлен как final, его нельзя переопределить в подклассах.

@AllArgsConstructor
public abstract class Person {
    private final String name;
    private final String surname;
    private final int age;

    public final getName() {
        return name;
    }

    public final getSurname() {
        return surname;
    }

    public final getAge() {
        return age;
    }
}

Если класс объявлен как final, он не может быть унаследован

@Getter
public final class Student extends Person {

    public static final int STIP_AMOUNT = 2000;

    public int semesterNumber;

    public Student(String name, String surname, int age, int semesterNumber) {
        super (name, surname, age);
        this.semesterNumber = semesterNumber;
    }

    public int getSalary() {
        return STIP_AMOUNT;
    }
}

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

В Java модификаторы доступа используются для определения уровня доступа к классам, методам и полям, что позволяет контролировать, кто может использовать или изменять эти элементы. Существует четыре основных модификатора доступа: public, private, protected и отсутствие модификатора (по умолчанию), каждый из которых определяет свой уровень доступа

Виды модификаторов:

  • private - доступно только внутри класса
  • package visible (default) - доступно только из классов, лежащих в одном пакете с исходным классом.
  • protected — доступно внутри класса и внутри классов-наследников.
  • public — доступно из любых других классов.

Иерархия классов

В Java все классы неявно наследуются от класса Object, который является корнем иерархии классов. Это означает, что каждый класс в Java наследует методы, определенные в Object, такие как toString(), equals(), hashCode() и clone(), что обеспечивает единый интерфейс для работы с объектами. Благодаря этому, разработчики могут использовать эти методы для сравнения объектов, получения строкового представления и других операций, не заботясь о конкретной реализации класса. Это также позволяет использовать полиморфизм, так как объекты различных классов могут быть обработаны как объекты типа Object.


Дополнительные материалы

  1. Наследование - документация Oracle

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Программирование на Java, Разработка веб-приложений и микросервисов используя Spring Boot, проектирование REST API
10 месяцев
с нуля
Старт 3 апреля
профессия
новый
Разработка фронтенд- и бэкенд-компонентов для веб-приложений на Spring Boot и React
16 месяцев
с нуля
Старт 3 апреля

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу