Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Наследование в Java: принципы расширения классов и ключевое слово extends

Наследование — процесс, при котором один класс приобретает свойства (поля и методы) другого. Информация организуется в иерархическом порядке.

Ключевое слово extends


class Super { ... }
class Sub extends Super { ... }

Пример наследования


class Calculation {
    int z;
    public void addition(int x, int y) {
        z = x + y;
        System.out.println("The sum: " + z);
    }
    public void Subtraction(int x, int y) {
        z = x - y;
        System.out.println("The difference: " + z);
    }
}

public class My_Calculation extends Calculation {
    public void multiplication(int x, int y) {
        z = x * y;
        System.out.println("The product: " + z);
    }
    public static void main(String args[]) {
        int a = 20, b = 10;
        My_Calculation demo = new My_Calculation();
        demo.addition(a, b);
        demo.Subtraction(a, b);
        demo.multiplication(a, b);
    }
}

Результат:


The sum of the given numbers: 30
The difference between the given numbers: 10
The product of the given numbers: 200

При создании объекта подкласса копия суперкласса создаётся внутри него. Поэтому через объект подкласса доступны члены суперкласса.

Ссылка суперкласса на объект подкласса


Calculation demo = new My_Calculation();
demo.addition(a, b); // OK
demo.Subtraction(a, b); // OK
// demo.multiplication(a, b); // ОШИБКА: метод есть только в подклассе

Рекомендуется использовать ссылку подкласса для доступа ко всем членам.

Ключевое слово super

Аналог this, но для суперкласса. Используется для:

  1. Разрешения конфликта имён: super.variable, super.method()
  2. Вызова конструктора суперкласса: super(значения)

Пример: дифференциация членов


class Super_class {
    int num = 20;
    public void display() { System.out.println("Superclass display"); }
}

public class Sub_class extends Super_class {
    int num = 10;
    public void display() { System.out.println("Subclass display"); }

    public void my_method() {
        Sub_class sub = new Sub_class();
        sub.display();
        super.display();
        System.out.println("Sub num: " + sub.num);
        System.out.println("Super num: " + super.num);
    }
    public static void main(String args[]) {
        new Sub_class().my_method();
    }
}

Результат:


Subclass display
Superclass display
Sub num: 10
Super num: 20

Пример: вызов параметризованного конструктора суперкласса


class Superclass {
    int age;
    Superclass(int age) { this.age = age; }
    public void getAge() { System.out.println("Age in super: " + age); }
}

public class Subclass extends Superclass {
    Subclass(int age) { super(age); }
    public static void main(String args[]) {
        Subclass s = new Subclass(24);
        s.getAge();
    }
}

Результат: The value of the variable named age in super class is: 24

Отношение IS-A

extends реализует отношение IS-A («является»):


class Animal {}
class Mammal extends Animal {}
class Reptile extends Animal {}
class Dog extends Mammal {}

Проверка через instanceof:


Animal a = new Animal();
Mammal m = new Mammal();
Dog d = new Dog();
System.out.println(m instanceof Animal); // true
System.out.println(d instanceof Mammal); // true
System.out.println(d instanceof Animal); // true

Ключевое слово implements

Используется для реализации интерфейсов. Класс не может расширить несколько классов, но может реализовать несколько интерфейсов.


interface Animal {}
class Mammal implements Animal {}
class Dog extends Mammal {}

Отношение HAS-A

Класс содержит экземпляр другого класса (композиция). Уменьшает дублирование кода.


class Vehicle {}
class Speed {}
class Van extends Vehicle {
    private Speed sp; // Van HAS-A Speed
}

Типы наследования

Java поддерживает:

Множественное наследование классов НЕ поддерживается (class cannot extend multiple classes). Но класс может реализовывать несколько интерфейсов.

java

  1. Ключевое слово final в Java: переменные, методы и классы
  2. Оператор instanceof в Java: полное руководство с примерами
  3. Статические вложенные классы в Java: использование, отличия и примеры
  4. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  5. Паттерн Singleton в Java: как реализовать и безопасно использовать
  6. Рефлексия в Java: инспекция классов, методов и полей во время выполнения
  7. Освоение Java ObjectOutputStream: сериализация, методы и практические примеры
  8. Освоение Java Generics: создание переиспользуемого, типобезопасного кода
  9. Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление
  10. Наследование в C#: базовые и производные классы, интерфейсы