Рубрики

C # | Многоуровневое наследование

В многоуровневом наследовании производный класс наследует базовый класс, а также производный класс также действует как базовый класс для другого класса. Например, три класса с именами A, B и C, как показано на рисунке ниже, где класс C является производным от класса B, а класс B — производным от класса A. В этой ситуации каждый производный класс наследует все характеристики его базовые классы. Таким образом, класс C наследует все функции класса A и B.

Пример: здесь производный класс Rectangle используется в качестве базового класса для создания производного класса с именем ColorRectangle. Благодаря наследованию ColorRectangle наследует все характеристики Rectangle и Shape и добавляет дополнительное поле с именем rcolor, которое содержит цвет прямоугольника.

Этот пример также охватывает концепцию конструкторов в производном классе. Как мы знаем, подкласс наследует все члены (поля, методы) от своего суперкласса, но конструкторы не являются членами, поэтому они не наследуются подклассами, но конструктор суперкласса может быть вызван из подкласса. Как показано в приведенном ниже примере, base ссылается на конструктор в ближайшем базовом классе. База в ColorRectangle вызывает конструктор в Rectangle, а база в классе Rectangle — конструктор в Shape.

// C # программа для иллюстрации
// концепция многоуровневого наследования

using System;

  

class Shape {

  

    double a_width;

    double a_length;

  

    // Конструктор по умолчанию

    public Shape()

    {

        Width = Length = 0.0;

    }

  

    // Конструктор для Shape

    public Shape(double w, double l)

    {

        Width = w;

        Length = l;

    }

  

    // Построить объект с

    // равной длины и ширины

    public Shape(double y)

    {

        Width = Length = y;

    }

  

    // Свойства для длины и ширины

    public double Width

    {

        get {

               return a_width; 

            }

  

        set

              a_width = value < 0 ? -value : value; 

            }

    }

  

    public double Length

    {

        get

               return a_length; 

            }

  

        set

              a_length = value < 0 ? -value : value;

            }

    }

    public void DisplayDim()

    {

        Console.WriteLine("Width and Length are " 

                     + Width + " and " + Length);

    }

}

  
// Производный класс Shape
// для прямоугольника.

class Rectangle : Shape {

  

    string Style;

  

    // Конструктор по умолчанию.

    // Это вызывает по умолчанию

    // конструктор Shape.

    public Rectangle()

    {

        Style = "null";

    }

  

    // Конструктор

    public Rectangle(string s, double w, double l)

        : base(w, l)

    {

        Style = s;

    }

  

    // Построить квадрат.

    public Rectangle(double y)

        : base(y)

    {

        Style = "square";

    }

  

    // Возвращаем область прямоугольника.

    public double Area()

    {

        return Width * Length;

    }

  

    // Показать стиль прямоугольника.

    public void DisplayStyle()

    {

        Console.WriteLine("Rectangle is  " + Style);

    }

}

  
// Наследование класса Rectangle

class ColorRectangle : Rectangle {

  

    string rcolor;

  

    // Конструктор

    public ColorRectangle(string c, string s,

                          double w, double l)

        : base(s, w, l)

    {

        rcolor = c;

    }

  

    // Отображение цвета.

    public void DisplayColor()

    {

        Console.WriteLine("Color is " + rcolor);

    }

}

  
// Класс водителя

class GFG {

  

    // Основной метод

    static void Main()

    {

        ColorRectangle r1 = new ColorRectangle("pink"

                   "Fibonacci rectangle", 2.0, 3.236);

  

        ColorRectangle r2 = new ColorRectangle("black",

                                   "Square", 4.0, 4.0);

  

        Console.WriteLine("Details of r1: ");

        r1.DisplayStyle();

        r1.DisplayDim();

        r1.DisplayColor();

  

        Console.WriteLine("Area is " + r1.Area());

        Console.WriteLine();

  

        Console.WriteLine("Details of r2: ");

        r2.DisplayStyle();

        r2.DisplayDim();

        r2.DisplayColor();

  

        Console.WriteLine("Area is " + r2.Area());

    }

}

Выход:

Details of r1: 
Rectangle is  Fibonacci rectangle
Width and Length are 2 and 3.236
Color is pink
Area is 6.472

Details of r2: 
Rectangle is  Square
Width and Length are 4 and 4
Color is black
Area is 16

Рекомендуемые посты:

C # | Многоуровневое наследование

0.00 (0%) 0 votes