Sintaxe Básica de Herança (:)
Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 19 de 70.
A herança permite que uma classe adquira as propriedades e métodos de outra classe. Em vez de reescrever o mesmo código, você cria uma classe base (pai) com funcionalidade compartilhada e, em seguida, cria classes derivadas (filhas) que herdam dela.
Em C#, você usa o símbolo de dois pontos : para indicar herança:
public class Animal
{
public string Name { get; set; }
public void Eat()
{
Console.WriteLine($"{Name} is eating.");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine($"{Name} says Woof!");
}
}A classe Dog herda tudo de Animal. Ela tem acesso à propriedade Name e ao método Eat() sem declará-los novamente, além de adicionar seu próprio método Bark():
Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat(); // Saída: Buddy está comendo.
myDog.Bark(); // Saída: Buddy diz Woof!O C# suporta apenas herança única, o que significa que uma classe pode herdar de apenas uma classe base. No entanto, você pode construir cadeias de herança onde uma classe derivada se torna a base para outra classe. Isso cria uma hierarquia que modela relacionamentos do mundo real, mantendo seu código organizado e reutilizável.
Desafio
FácilVamos construir uma hierarquia de veículos que demonstra como a herança permite que classes derivadas compartilhem funcionalidades de uma classe base, enquanto adicionam seus próprios comportamentos exclusivos.
Você criará três arquivos para organizar seu código:
Vehicle.cs: Defina uma classeVehicleno namespaceTransport. Esta será sua classe base que todos os veículos compartilham. Ela deve ter uma propriedadeBrand(string) e uma propriedadeYear(int), juntamente com um métodoStartEngine()que imprime"{Brand} engine started."Car.cs: Defina uma classeCarno namespaceTransportque herda deVehicle. O carro adiciona sua própria propriedadeNumberOfDoors(int) e um métodoHonk()que imprime"{Brand} goes Beep Beep!"Program.cs: No seu arquivo principal, crie uma instância deCarusando valores de entrada. Defina suas propriedades (incluindo as herdadas) e, em seguida, demonstre que o carro pode usar tanto seus próprios métodos quanto os métodos que herdou deVehicle.
Você receberá três entradas:
- Nome da marca (Brand name)
- Ano (Year)
- Número de portas (Number of doors)
Imprima as informações do carro e demonstre suas capacidades neste formato:
Car: {Brand} ({Year})
Doors: {NumberOfDoors}
{StartEngine output}
{Honk output}Por exemplo, se as entradas forem Toyota, 2022 e 4, a saída deve ser:
Car: Toyota (2022)
Doors: 4
Toyota engine started.
Toyota goes Beep Beep!Observe como seu Car pode acessar a propriedade Brand e o método StartEngine(), embora eles estejam definidos em Vehicle. Esse é o poder da herança - a classe derivada obtém automaticamente tudo de sua classe base!
Folha de consulta
A herança permite que uma classe adquira propriedades e métodos de outra classe usando o símbolo de dois pontos ::
public class Animal
{
public string Name { get; set; }
public void Eat()
{
Console.WriteLine($"{Name} is eating.");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine($"{Name} says Woof!");
}
}A classe derivada (Dog) herda todas as propriedades e métodos da classe base (Animal) e pode adicionar os seus próprios:
Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat(); // Inherited method
myDog.Bark(); // Own methodO C# suporta apenas herança única - uma classe pode herdar de apenas uma classe base. No entanto, você pode criar cadeias de herança para construir hierarquias.
Experimente você mesmo
using System;
using Transport;
class Program
{
public static void Main(string[] args)
{
// Ler a entrada
string brand = Console.ReadLine();
int year = Convert.ToInt32(Console.ReadLine());
int doors = Convert.ToInt32(Console.ReadLine());
// TODO: Criar uma instância de Car
// TODO: Definir as propriedades do carro (Brand, Year, NumberOfDoors)
// TODO: Imprimir as informações do carro no formato exigido:
// Car: {Brand} ({Year})
// Doors: {NumberOfDoors}
// Em seguida, chamar StartEngine() e Honk()
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosNamespaces e DiretivasIntrodução a Classes e ObjetosA Palavra-chave 'this'Métodos e ParâmetrosCampos vs PropriedadesConstrutoresInicializadores de ObjetosRecapitulação - Calculadora Simples4Herança
Sintaxe Básica de Herança (:)A Palavra-chave 'base'Palavras-chave Virtual e OverrideClasses SeladasA Classe Base 'object'Recapitulação - Hierarquia de Funcionários7Recursos Avançados
Sobrecarga de OperadoresIndexadores (this[])Sobrescrita de ToString()Métodos de ExtensãoRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoSingleton Thread-SafePadrão FactoryPadrão Observer (Eventos)Padrão Strategy2Propriedades e Membros Estáticos
Propriedades AutoimplementadasPropriedades de Apenas Leitura/EscritaCampos e Métodos EstáticosClasses EstáticasMembros com Corpo de Expressão5Polimorfismo e Interfaces
Polimorfismo: Compilação vs ExecuçãoInterface vs Classe AbstrataMúltiplas InterfacesInterfaces ExplícitasUpcasting e DowncastingRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição sobre HerançaGenerics (Classes e Métodos)Delegates e EventosAtributos e ReflectionIDisposable e a Instrução usingFundamentos de Injeção de Dependência11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Arquitetura de Classes
Dados de Instância vs EstáticosPalavras-chave 'readonly' e 'const'Campos de SuporteRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Modificadores de AcessoPropriedades para EncapsulamentoImplementação de Ocultação de DadosPadrões de ImutabilidadeRecapitulação - Registros de Estudantes9Argumentos Variáveis
A Palavra-chave 'params'Parâmetros OpcionaisArgumentos NomeadosSobrecarga de Métodos