В 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
.
Дополнительные материалы

Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.