C# | Herencia multinivel – Part 1

En la herencia multinivel , una clase derivada heredará una clase base y, al igual que la clase derivada, también actuará como clase base para otra clase. Por ejemplo, tres clases denominadas A, B y C, como se muestra en la siguiente imagen, donde la clase C se deriva de la clase B y la clase B se deriva de la clase A. En esta situación, cada clase derivada hereda todas las características de sus clases base. Entonces, la clase C hereda todas las características de las clases A y B.

Ejemplo: Aquí, la clase derivada Rectangle se usa como clase base para crear la clase derivada llamada ColorRectangle. Debido a la herencia, ColorRectangle hereda todas las características de Rectangle y Shape y agrega un campo adicional llamado rcolor, que contiene el color del rectángulo.

Este ejemplo también cubre el concepto de constructores en una clase derivada. Como sabemos, una subclase hereda todos los miembros (campos, métodos) de su superclase, pero los constructores no son miembros, por lo que las subclases no los heredan, pero el constructor de la superclase puede invocarse desde la subclase. Como se muestra en el siguiente ejemplo, base se refiere a un constructor en la clase base más cercana. La base en ColorRectangle llama al constructor en Rectangle y la base en la clase Rectangle al constructor en Shape.

// C# program to illustrate the
// concept of multilevel inheritance
using System;
  
class Shape {
  
    double a_width;
    double a_length;
  
    // Default constructor
    public Shape()
    {
        Width = Length = 0.0;
    }
  
    // Constructor for Shape
    public Shape(double w, double l)
    {
        Width = w;
        Length = l;
    }
  
    // Construct an object with 
    // equal length and width
    public Shape(double y)
    {
        Width = Length = y;
    }
  
    // Properties for Length and Width
    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);
    }
}
  
// A derived class of Shape 
// for the rectangle.
class Rectangle : Shape {
  
    string Style;
  
    // A default constructor. 
    // This invokes the default
    // constructor of Shape.
    public Rectangle()
    {
        Style = "null";
    }
  
    // Constructor
    public Rectangle(string s, double w, double l)
        : base(w, l)
    {
        Style = s;
    }
  
    // Construct an square.
    public Rectangle(double y)
        : base(y)
    {
        Style = "square";
    }
  
    // Return area of rectangle.
    public double Area()
    {
        return Width * Length;
    }
  
    // Display a rectangle's style.
    public void DisplayStyle()
    {
        Console.WriteLine("Rectangle is  " + Style);
    }
}
  
// Inheriting Rectangle class
class ColorRectangle : Rectangle {
  
    string rcolor;
  
    // Constructor
    public ColorRectangle(string c, string s,
                          double w, double l)
        : base(s, w, l)
    {
        rcolor = c;
    }
  
    // Display the color.
    public void DisplayColor()
    {
        Console.WriteLine("Color is " + rcolor);
    }
}
  
// Driver Class
class GFG {
  
    // Main Method
    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());
    }
}
Producción:

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

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *