текст перекладу
Наслідування є основною концепцією об'єктно-орієнтованого програмування (ООП), яке дозволяє класам спільно використовувати атрибути та методи, покращуючи повторне використання коду та читабельність. У цьому посібнику ми розглянемо наслідування за допомогою практичного прикладу на Java, щоб допомогти нам засвоїти основи створення класів і підкласів ефективно.
Дизайн від Freepik
Ключові концепції
- Основний клас (Суперклас): Базовий клас, який містить загальні атрибути та методи.
- Підклас (Дочірній клас): Спеціалізована версія основного класу, яка наслідує від нього властивості і може також визначати свої власні унікальні атрибути та поведінку.
- Наслідування: Дозволяє підкласу використовувати властивості та методи основного класу без їх повторного визначення.
Приклад: створення класу Person
та підкласів на Java
Уявімо собі основний клас Person
, який представляє загальні атрибути будь-якої особи, такі як name
(ім'я), age
(вік) та gender
(стать). Підкласи, такі як Student
, Doctor
, Driver
та Engineer
, наслідують від класу Person
і додають свої унікальні характеристики. Ось як це виглядає в Java.
Person
---------------------------------
| Атрибути: name, age, gender |
| Методи: speak(), eat(), walk() |
---------------------------------
/ | \
Student Doctor Engineer
---------------- ---------------- -----------------
Атрибути: Атрибути: Атрибути:
grade, school спеціалізація поле, навички
Методи: Методи: Методи:
study() diagnose() design()
Driver
-----------------
Атрибути:
licenseType
Методи:
drive()
Пояснення:
Основний клас: Person
- Атрибути:
name
: Ім'я особи (наприклад, "John").age
: Вік особи (наприклад, 25).gender
: Стать особи (наприклад, "Male").
- Методи:
speak()
: Дозволяє людині говорити.eat()
: Представляє загальну дію їжі.walk()
: Представляє дію ходьби, яка є спільною для всіх людей.
Ці атрибути та методи, наприклад, speak()
та name
, є загальними та можуть бути успадковані всіма підкласами, такими як Engineer
.
- Підклас:
Student
- Додаткові атрибути:
grade
: Поточний клас студента (наприклад, "10-й").school
: Назва школи (наприклад, "Green Valley High").
- Додатковий метод:
study()
: Представляє акт навчання.
2. Підклас: Doctor
- Додаткові атрибути:
specialization
: Спеціалізація лікаря (наприклад, "Кардіологія").
- Додатковий метод:
diagnose()
: Представляє діагностику пацієнта.
3. Підклас: Engineer
- Додаткові атрибути:
field
: Галузь інженерії (наприклад, "Програмне забезпечення").skills
: Список технічних навичок (наприклад, "Java, Python").
- Додатковий метод:
design()
: Представляє розробку проекту чи рішення.
4. Підклас: Driver
- Додаткові атрибути:
licenseType
: Тип водійських прав.
- Додатковий метод:
drive()
: Представляє дію водіння.
текст перекладу
Підклас: Driver
- Додатковий атрибут:
licenseType
: Тип водійських прав (наприклад, "Комерційні").
- Додатковий метод:
drive()
: Представляє водіння транспортного засобу.
Основні переваги цієї структури:
- Наслідування: Загальні атрибути (
name
,age
,gender
) і методи (speak()
,eat()
,walk()
) визначені один раз у класіPerson
і успадковані всіма підкласами, що дозволяє уникнути дублювання. - Спеціалізація: Кожен підклас визначає атрибути та методи, специфічні для своєї ролі, що робить дизайн інтуїтивно зрозумілим і логічним.
Приклад реалізації коду на Java (основний підхід):
// Основний клас
class Person {
String name;
int age;
String gender;
void speak() {
System.out.println(name + " говорить.");
}
void eat() {
System.out.println(name + " їсть.");
}
void walk() {
System.out.println(name + " йде.");
}
}
// Підклас: Student
class Student extends Person {
String grade;
String school;
void study() {
System.out.println(name + " навчається.");
}
}
// Підклас: Doctor
class Doctor extends Person {
String specialization;
void diagnose() {
System.out.println(name + " діагностує пацієнта.");
}
}
// Підклас: Engineer
class Engineer extends Person {
String field;
String[] skills;
void design() {
System.out.println(name + " проектує рішення.");
}
}
// Підклас: Driver
class Driver extends Person {
String licenseType;
void drive() {
System.out.println(name + " водить транспортний засіб.");
}
}
Цей структурований і детальний підхід забезпечує логічне наслідування та спеціалізацію, зберігаючи дизайн зрозумілим та легким для розуміння як для технічних, так і для нетехнічних користувачів.
Крок 1: Опис класу Person
Клас Person
включає загальні атрибути (name
, age
та gender
) і метод для представлення особи.
public class Person {
// Загальні атрибути
private String name;
private int age;
private String gender;
// Конструктор для ініціалізації атрибутів
public Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
// Метод для представлення особи
public void introduce() {
System.out.println("Привіт, моє ім'я " + name + ", і мені " + age + " років.");
}
// Геттер для загальних атрибутів
public String getName()
{
return name;
}
public int getAge() { return age; }
public String getGender() { return gender; }
}
Тут конструктор ініціалізує загальні атрибути, а метод introduce()
дозволяє будь-якій особі класу Person
представити себе.
Крок 2: Створення підкласу Student
Клас Student
розширює клас Person
, успадковуючи його атрибути і метод introduce()
, додаючи свій унікальний атрибут, rollNumber
.
public class Student extends Person {
private int rollNumber;
// Конструктор
public Student(String name, int age, String gender, int rollNumber) {
super(name, age, gender); // Викликає конструктор класу Person
this.rollNumber = rollNumber;
}
// Спеціальна поведінка для Student
public void study() {
System.out.println(getName() + " навчається."); // Використовує успадкований getName() з Person
}
public int getRollNumber() { return rollNumber; }
}
Додаткові підкласи
Кожен підклас наслідує від Person
і додає унікальні методи та атрибути:
Підклас Doctor
public class Doctor extends Person {
private String specialization;
public Doctor(String name, int age, String gender, String specialization) {
super(name, age, gender);
this.specialization = specialization;
}
public void treatPatient() {
System.out.println(getName() + " лікує пацієнта в галузі " + specialization + ".");
}
public String getSpecialization() { return specialization; }
}
Підклас Driver
public class Driver extends Person {
private String licenseType;
public Driver(String name, int age, String gender, String licenseType) {
super(name, age, gender);
this.licenseType = licenseType;
}
public void drive() {
System.out.println(getName() + " водить транспортний засіб.");
}
public String getLicenseType() { return licenseType; }
}
текст перекладу
private String licenseNumber;
public Driver(String name, int age, String gender, String licenseNumber) {
super(name, age, gender);
this.licenseNumber = licenseNumber;
}
public void drive() {
System.out.println(getName() + " водить машину.");
}
public String getLicenseNumber() { return licenseNumber; }
}
Підклас Engineer
public class Engineer extends Person {
private String field;
public Engineer(String name, int age, String gender, String field) {
super(name, age, gender);
this.field = field;
}
public void design() {
System.out.println(getName() + " проектує проект у галузі " + field + ".");
}
public String getField() { return field; }
}
Пояснення наслідування в Java
- Загальні атрибути та методи: Клас
Person
містить атрибути та методи, які спільні для всіх підкласів, такі якname
,age
,gender
іintroduce()
. - Розширення функціональності: Кожен підклас успадковує загальну функціональність, водночас додаючи унікальні методи (
study()
вStudent
,treatPatient()
вDoctor
тощо), що робить кожен підклас спеціалізованим. - Використання методів батьківського класу: Використання
super()
в конструкторі підкласу дозволяє підкласу ініціалізувати успадковані атрибути з класуPerson
, що, до речі, є чудовою функцією!
Запуск коду: Приклад використання
Ось як створювати та взаємодіяти з цими класами:
public class Main {
public static void main(String[] args) {
Student student = new Student("Аліса", 20, "Жіноча", 101);
Doctor doctor = new Doctor("Доктор", 45, "Чоловіча", "Кардіолог");
}
}
текст перекладу
Smith", 45, "Чоловіча", "Кардіологія");
Driver driver = new Driver("Майк", 30, "Чоловіча", "DL12345");
Engineer engineer = new Engineer("Джейн", 35, "Жіноча", "Будівельна інженерія");
student.introduce();
student.study();
doctor.introduce();
doctor.treatPatient();
driver.introduce();
driver.drive();
engineer.introduce();
engineer.design();
}
}
Цей посібник демонструє концепцію наслiдування в Java через клас Person
та кілька спеціалізованих підкласів. За допомогою наслiдування кожен підклас автоматично отримує атрибути та методи класу Person
, одночасно додаючи специфічні риси, що забезпечує ефективний, зручний для читання та багаторазовий код. Розуміння наслiдування є основним для освоєння об'єктно-орієнтованого програмування, дозволяючи розробникам створювати гнучкі та масштабовані додатки.
Щасливого кодування!
Перекладено з: Chapter[12]: Understanding Inheritance in Java: A Beginner’s Guide