Dominando Herança em C#: Construa Código Reutilizável e Manutenível
Uma das mais importantes conceitos em POO é herança. Permite definir classe em termos de outra, facilitando criação e manutenção, reutilizando funcionalidade e acelerando implementação.
Em vez de escrever novos membros, o programador designa que a nova classe herde membros de uma existente. A existente é classe base, a nova é classe derivada.
Herança implementa relação É-UM (IS-A): mamífero É-UM animal, cão É-UM mamífero → cão É-UM animal.
Classes Base e Derivadas
Uma classe pode derivar de mais de uma classe ou interface (herança múltipla via interfaces).
Sintaxe:
<acesso> class <classe_base> { ... }
class <classe_derivada> : <classe_base> { ... }
Exemplo: Shape e Rectangle
using System;
namespace InheritanceApplication
{
class Shape
{
public void SetWidth(int w) { width = w; }
public void SetHeight(int h) { height = h; }
protected int width, height;
}
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);
Console.WriteLine("Total area: {0}", rect.GetArea());
Console.ReadKey();
}
}
}
Saída: Total area: 35
Inicializando Classe Base
Classe derivada herda membros da base. Objeto da superclasse deve ser criado antes do subclass. Use lista de inicialização de membro:
class Rectangle
{
protected double length, width;
public Rectangle(double l, double w) { length = l; width = w; }
public double GetArea() { return length * width; }
public void Display() { ... }
}
class Tabletop : Rectangle
{
private double cost;
public Tabletop(double l, double w) : base(l, w) { }
public double GetCost() { return GetArea() * 70; }
public void Display() { base.Display(); Console.WriteLine("Cost: {0}", GetCost()); }
}
Herança Múltipla em C#
C# não suporta herança múltipla de classes. Use interfaces para implementá-la.
Exemplo com Interface
interface PaintCost { int GetCost(int area); }
class Rectangle : Shape, PaintCost
{
public int GetArea() { return width * height; }
public int GetCost(int area) { return area * 70; }
}
Saída: Total area: 35 / Total paint cost: $2450
Linguagem C
- Classes e Objetos em C#: Fundamentos para POO Robusta
- Palavra-chave Static em C#: Dominando Variáveis, Métodos e Classes Estáticas
- Entendendo Classes Aninhadas em C#: Definição, Uso e Herança
- Dominando Templates de Classe em C++: Um Guia Prático
- Dominando Herança em Python: Conceitos, Sintaxe e Exemplos Práticos
- Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
- Dominando Java ObjectOutputStream: Serialização, Métodos e Exemplos Práticos
- Dominando Java Generics – Construindo Código Reutilizável e Type-Safe
- Dominando Operações de Arquivo em Java com java.io – Criação, Leitura, Escrita e Exclusão
- Entendendo a Estrutura de Programas C#: Componentes Essenciais e Exemplo