C# - Herança
Um dos conceitos mais importantes na programação orientada a objetos é a herança. A herança nos permite definir uma classe em termos de outra classe, o que facilita a criação e manutenção de um aplicativo. Isso também oferece a oportunidade de reutilizar a funcionalidade do código e acelera o tempo de implementação.
Ao criar uma classe, em vez de escrever membros de dados e funções de membro completamente novos, o programador pode designar que a nova classe deve herdar os membros de uma classe existente. Esta classe existente é chamada de base classe, e a nova classe é chamada de derivada classe.
A ideia de herança implementa o IS-A relação. Por exemplo, mamífero É A animal, cachorro É-A mamífero, portanto, cão IS-A animal também, e assim por diante.
Classes Base e Derivadas
Uma classe pode ser derivada de mais de uma classe ou interface, o que significa que ela pode herdar dados e funções de várias classes ou interfaces base.
A sintaxe usada em C# para criar classes derivadas é a seguinte −
<acess-specifier> class <base_class> { ... } class <derived_class> : <base_class> { ... }
Considere uma classe base Shape e sua classe derivada Rectangle −
Demonstração ao vivo
using System; namespace InheritanceApplication { class Shape { public void setWidth(int w) { width = w; } public void setHeight(int h) { height = h; } protected int width; protected int height; } // Derived class class Rectangle: Shape { public int getArea() { return (width * height); } } class RectangleTester { static void Main(string[] args) { Rectangle Rect = new Rectangle(); Rect.setWidth(5); Rect.setHeight(7); // Print the area of the object. Console.WriteLine("Total area: {0}", Rect.getArea()); Console.ReadKey(); } } }
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Total area: 35
Inicializando a classe base
A classe derivada herda as variáveis de membro da classe base e os métodos de membro. Portanto, o objeto da superclasse deve ser criado antes da criação da subclasse. Você pode fornecer instruções para a inicialização da superclasse na lista de inicialização de membros.
O programa a seguir demonstra isso -
Demonstração ao vivo
using System; namespace RectangleApplication { class Rectangle { //member variables protected double length; protected double width; public Rectangle(double l, double w) { length = l; width = w; } public double GetArea() { return length * width; } public void Display() { Console.WriteLine("Length: {0}", length); Console.WriteLine("Width: {0}", width); Console.WriteLine("Area: {0}", GetArea()); } }//end class Rectangle class Tabletop : Rectangle { private double cost; public Tabletop(double l, double w) : base(l, w) { } public double GetCost() { double cost; cost = GetArea() * 70; return cost; } public void Display() { base.Display(); Console.WriteLine("Cost: {0}", GetCost()); } } class ExecuteRectangle { static void Main(string[] args) { Tabletop t = new Tabletop(4.5, 7.5); t.Display(); Console.ReadLine(); } } }
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Length: 4.5 Width: 7.5 Area: 33.75 Cost: 2362.5
Herança múltipla em C#
C# não suporta herança múltipla . No entanto, você pode usar interfaces para implementar herança múltipla. O programa a seguir demonstra isso -
Demonstração ao vivo
using System; namespace InheritanceApplication { class Shape { public void setWidth(int w) { width = w; } public void setHeight(int h) { height = h; } protected int width; protected int height; } // Base class PaintCost public interface PaintCost { int getCost(int area); } // Derived class class Rectangle : Shape, PaintCost { public int getArea() { return (width * height); } public int getCost(int area) { return area * 70; } } class RectangleTester { static void Main(string[] args) { Rectangle Rect = new Rectangle(); int area; Rect.setWidth(5); Rect.setHeight(7); area = Rect.getArea(); // Print the area of the object. Console.WriteLine("Total area: {0}", Rect.getArea()); Console.WriteLine("Total paint cost: ${0}" , Rect.getCost(area)); Console.ReadKey(); } } }
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Total area: 35 Total paint cost: $2450
Linguagem C