<<Предыдущий урок   Список уроков   Следующий урок>>

Наследование в java

Наследование в Java позволяет повторно использовать код одного класса в другом классе, то есть вы можете унаследовать новый класс от уже существующего класса. Главный наследуемый класс в Java называют родительским классам, или суперклассом. Наследующий класс называют дочерним классом, или подклассом. Подкласс наследует все поля и свойства суперкласса, а также может иметь свои поля и свойства, отсутствующие в классе-родителе.

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

Рассмотрим класс под названием Shape (Форма). Shape является базовым классом, от которого наследуются другие формы, таких как прямоугольник, квадрат, круг и т.д.

[pastacode lang=»java» message=»Shape.java» highlight=»» provider=»manual»]

[/pastacode]

Поскольку это просто общая «форма», метод  вычисления площади area() будет возвращать ноль.
Чтобы узнать площадь конкретной фигуры, нужно создать подкласс, унаследованный от класса Shape, и в нем переопределить метод area().

От класса Shape  наследуется класс Circle, который тоже представляет собой форму.

[pastacode lang=»java» message=»Circle.java» highlight=»» provider=»manual»]

[/pastacode]

Метод area() базового класса наследуется классом Circle и становится доступен в нем, но нам нужно  переопределить метод area() в классе Circle, таким образом, чтобы он вычислял площадь круга.

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

Создадим  класс Main, и в нем напишем метод, который вычисляет большую площадь двух фигур:

[pastacode lang=»java» message=»Main.java» highlight=»» provider=»manual»]

[/pastacode]

Как вы можете видеть, метод getLargerShape() не требует указания определенного типа фигуры для его двух параметров. В качестве параметров для этого метода можно использовать экземпляр любого класса, который наследует тип Shape. Можно использовать экземпляр класса круг, прямоугольник, треугольник, трапеция, и т.д. — до тех пор, как они наследуют класс формы.

Резюме:

Наследование классов ( inheritance ) один из существенных атрибутов ООП (объектно-ориентированного программирования). Оно позволяет строить новые классы на базе существующих, добавляя в них новые возможности или переопределяя существующие.

Унаследованные поля могут быть использованы непосредственно, как и любые другие поля. Вы можете объявить поле в дочернем классе с тем же именем, что и в суперклассе, скрывая его таким образом (но это не рекомендуется). Вы можете объявить новые поля в подклассе, которых нет в суперклассе. Унаследованные методы тоже можно использовать непосредственно. Вы можете написать в подклассе новый метод, который имеет ту же сигнатуру, что и метод суперкласса, это называется переопределением метода. Вы можете написать новый статический метод в подклассе, который имеет ту же сигнатуру, что и метод суперкласса, таким образом, скрывая его (то есть метод суперкласа будет виден внутри подкласса только через ключевое слово super). Вы можете объявить новые методы в подклассе, которых нет в суперклассе. Вы можете написать конструктор подкласса, который вызывает конструктор суперкласса, неявно или с помощью ключевого слова super. Подкласс не наследует закрытые члены родительского класса, например, обозначенные модификатором private.

Упражнение:

Создайте недостающий класс Rectangle, который наследует класс Shape и находит площадь.

Дополнительное чтение: Наследование в Java

Источник

<<Предыдущий урок   Список уроков   Следующий урок>>

Урок 9. Основы языка JAVA. Наследование в java обновлено: Май 4, 2016 автором: admin

  1. public class Rectangle extends Shape{
    public double SideA;
    public double SideB;

    public Rectangle(Double SideA, Double SideB){
    this.SideA = SideA;
    this.SideB = SideB;
    }

    public double Area(){
    return SideA * SideB;
    }
    }

  2. //Rectangle.java

    public class Rectangle extends Shape {

    private double lenght;
    private double width;

    public Rectangle(double lenght, double width) {
    this.lenght = lenght;
    this.width = width;
    }

    public double area() {
    return lenght * width;
    }
    }

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*
Website