Розділ[12]: Розуміння наслiдування в Java: Посібник для початківців

текст перекладу
Наслідування є основною концепцією об'єктно-орієнтованого програмування (ООП), яке дозволяє класам спільно використовувати атрибути та методи, покращуючи повторне використання коду та читабельність. У цьому посібнику ми розглянемо наслідування за допомогою практичного прикладу на Java, щоб допомогти нам засвоїти основи створення класів і підкласів ефективно.

pic

Дизайн від Freepik

Ключові концепції

  1. Основний клас (Суперклас): Базовий клас, який містить загальні атрибути та методи.
  2. Підклас (Дочірній клас): Спеціалізована версія основного класу, яка наслідує від нього властивості і може також визначати свої власні унікальні атрибути та поведінку.
  3. Наслідування: Дозволяє підкласу використовувати властивості та методи основного класу без їх повторного визначення.

Приклад: створення класу 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.

  1. Підклас: 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

Leave a Reply

Your email address will not be published. Required fields are marked *