VAGAS DE EMPREGO

balta.io balta.io
  • Cursos
  • Carreiras
  • Para sua Empresa
  • Livros
    • Background Services
    • Blazor com .NET 8
    • Segurança em APIs
    • Futuro do C# 12
    • Nullable Types
    • Clean Code
  • Blog

Seja Premium
balta.io

  • Cursos
  • Carreiras
  • Para sua Empresa
  • Agenda
  • Livros
    • Background Services
    • Blazor com .NET 8
    • Segurança em APIs
    • Futuro do C# 12
    • Nullable Types
    • Clean Code
  • Blog
  • Player
Seja Premium

Entre ou Cadastre-se

  • Home
  • Artigos
  • Orientação a objetos: Sobrescrita e Sobrecarga de métodos


👉 Temos uma versão mais atualizada deste artigo no nosso novo Blog

Orientação a objetos: Sobrescrita e Sobrecarga de métodos

Um dos recursos mais importantes da orientação a objetos é a possibilidade de sobrescrever ou sobrecarregar métodos e propriedades. Neste artigo vamos ver na prática como isto acontece.

Sobrescrita

O ato de sobrescrever um método ou propriedade significa dar uma nova forma ao mesmo, uma nova versão. Vimos isto no artigo anterior onde falamos sobre os pilares da orientação a objetos.

A sobrescrita de no C# é dada pelo uso em conjunto do modificador virtual e override. Sempre que marcamos uma propriedade ou método como virtual, significa que o mesmo pode ser sobrescrito.

A execução desta sobrescrita então é dada pela palavra reservada override, indicada antes do retorno da propriedade ou método.

Para contextualizar melhor, vamos tomar como base um objeto que possui uma finalidade.

public class Garrafa
{
	public void Finalidade()
	{
		Console.WriteLine("Garrafa genérica");
	}
}

Embora este objeto esteja bem materializado, uma das coisas legais da orientação a objetos é poder criar novos objetos a partir de um objeto base (pai). Este conceito é chamado de herança, como vimos no artigo anterior.

Queremos então criar novos modelos de garrafa, que tem características similares, mas finalidades diferentes, como por exemplo uma garrafa térmica.

Podemos então definir o método finalidade como virtual para que o mesmo possa ser sobrescrito posteriormente.

public class Garrafa
{
	public virtual void Finalidade()
	{
		Console.WriteLine("Garrafa genérica");
	}
}

Desta forma, dada uma nova garrafa, com uma finalidade diferente, podemos ter o mesmo nome no método, porém realizando uma ação completamente diferente.

Para executar então a sobrescrita do método Finalidade que está no objeto pai, utiizamos o override.

public class GarrafaTermica : Garrafa
{
	public override void Finalidade()
	{
		Console.WriteLine("Manter a temperatura");
	}
}

Ainda podemos, caso necessário, chamar o método Finalidade do objeto pai utilizando a palavra reservada base.

public class GarrafaTermica : Garrafa
{
	public override void Finalidade()
	{
		base.Finalidade();
		Console.WriteLine("Manter a temperatura");
	}
}

Neste caso o output do programa seria como mostrado abaixo, afinal, chamamos tanto o método Finalidade do pai quanto do filho.

Garrafa genérica
Manter a temperatura

Sobrecarga

Sobrecarregar métodos significa ter vários métodos com nomes iguais mais assinaturas diferentes.

A assinatura de um método no C# é dada pela junção do seu nome e seus parâmetros de entrada.

Tomando como base o método abaixo, sua assinatura seria Encher(int mililitros), o que nos permitiria ter outros métodos com o nome Encher desde que os mesmos contenham parâmetros diferentes.

public void Encher(int mililitros) {
    ...
}

No caso, os métodos abaixo NÃO SERIAM permitidos, resulando em um erro de compilação.

public void Encher(int mililitros) {
    ...
}

// Não permitido
public void Encher(int litros) {
    ...
}

// Não permitido
public double Encher(int ml) {
    ...
}

Mesmo mudando o retorno do método, ainda assim teríamos um erro de compilação, pelo fato dele (retorno do método) não fazer parte da assinatura.

Agora temos alguns exemplos que funcionariam, pois trocamos o tipo de entrada (Parâmetros) do método. Mesmo os parâmetros tendo nomes iguais, seus tipos são diferentes, o que permite o método ser sobrecarregado.

public void Encher(int mililitros) {
    ...
}

public void Encher(double litros) {
    ...
}

public double Encher(float mililitros) {
    ..
}

Um outro exemplo comum é ter diferentes métodos, com mesmo nome, mas acumulando parâmetros, como é comum vermos em várias classes do próprio .NET.

public void Data(int dia) {
    ...
}

public void Data(int dia, int mes) {
    ...
}

public void Data(int dia, int mes, int ano) {
    ...
}

Por fim, não se esqueça que podemos reduzir bastante código e a quantidade de métodos utilizando os parâmetros opcionais no C#.

public void Data(int dia, int mes = 1, int ano = 1990) {
    ...
}

Cursos

Não deixe de conhecer nosso material sobre C#, SOLID, Clean Code e muita orientação a objetos. Nossos cursos reúnem teoria e prática de forma direta e objetiva. Vou deixar a lista relacionada a orientação a objetos aqui, já na ordem de estudo.

Fundamentos do C

Este curso reune toda base necessária para evoluir na orientação a objetos com a linguagem C#. São mais de 140 aulas em 14 módulos e mais de 12 horas de conteúdo.

Com certeza é um conteúdo massivo, porém completo e necessário para você ter uma base sólida em sua carreira. https://balta.io/cursos/fundamentos-csharp

Modelando domínios ricos

Neste curso nós colocamos a mão na massa do começo ao fim resolvendo um problema completo somente com orientação a objetos e SOLID.

Este é um curso essencial e um divisor de águas na carreira de muitos desenvolvedores. https://balta.io/cursos/modelando-dominios-ricos

Refatorando para testes de unidade

Este é uma continuação do curso anterior, porém mostrando na prática como podemos manter a qualidade e manutenabilidade do software através de testes de unidade.

Este curso é o que vai te colocar um passo a frente de muitas pessoas no quesito qualidade e organização. https://balta.io/cursos/refatorando-para-testes-de-unidade

Carreira Backend Developer .NET

Caso queira ver todos os cursos anteriores e ainda aprender mais sobre APIs, padronização, documentação, performance e Cloud, temos uma carreira completa.

Esta carreira é extensa mas te dará toda base para desenvolvimento de APIs robustas e de alta performance. https://balta.io/carreiras/backend-developer-dotnet

Vídeo

Também fizemos uma versão em vídeo com exemplos destes códigos em TypeScript, JavaScript e Dart. Vale muito a pena conferir!

A base do programador: Orientação a objetos em C#, JavaScript, TypeScript e Dart

Populares

Priority Queue

Priority Queue ou fila prioritária é um tipo de lista inclusa no C# 10 que permite que seus itens...


Implicit Operators no C#

Implicit Operators permitem adicionar comportamentos de conversão a objetos Built In ou complexos...


ASP.NET 5 – Autenticação e Autorização com Bearer e JWT

Este artigo atualmente utiliza a versão 5.0.0-rc.1 do ASP.NET/.NET, o que significa que ainda não...


Clean Code - Guia e Exemplos

Saiba como manter seu código limpo (Clean Code) seguindo algumas práticas sugeridas pelo Robert C...


Git e GitHub - Instalação, Configuração e Primeiros Passos

Git é um sistema de controle de versões distribuídas, enquanto GitHub é uma plataforma que tem o ...


Compartilhe este artigo



Conheça o autor

André Baltieri

André Baltieri

Microsoft MVP

Me dedico ao desenvolvimento de software desde 2003, sendo minha maior especialidade o Desenvolvimento Web. Durante esta jornada pude trabalhar presencialmente aqui no Brasil e Estados Unidos, atender remotamente times da ?ndia, Inglaterra e Holanda, receber 8x Microsoft MVP e realizar diversas consultorias em empresas e projetos de todos os tamanhos.





3.119

Aulas disponíveis

291

horas de conteúdo

76.349

Alunos matriculados

52.918

Certificados emitidos





Comece de graça agora mesmo!

Temos mais de 21 cursos totalmente de graça e todos com certificado de conclusão.

Começar


Prefere algo mais Premium?

Conheça nossos planos



Premium anual

Compra única, parcelada em até
12x no cartão de crédito


12x R$

99

,79

=R$ 1.197,44
  • 1 ano de acesso
  • Acesso à todo conteúdo
  • Emissão de Certificado
  • Tira Dúvidas Online
  • 66 cursos disponíveis
  • 10 carreiras disponíveis
  • 161 temas de tecnologia
  • Conteúdo novo todo mês
  • Encontros Premium

Começar agora

Política de privacidade



Precisa de ajuda?

Dúvidas frequentes



  • Posso começar de graça?

    Sim! Basta criar sua conta gratuita no balta.io e começar seus estudos. Nós contamos com diversos cursos TOTALMENTE gratuitos e com certificado de conclusão.

  • Vou ter que pagar algo?

    Nós temos cursos gratuitos e pagos, porém você não precisa informar nenhum dado de pagamento para começar seus estudos gratuitamente conosco. Os cursos gratuitos são completos e com certificado de conclusão, você não paga nada por eles.

    Porém, caso queira algo mais Premium , você terá acesso à diversos benefícios que vão te ajudar ainda mais em sua carreira.

  • Por onde devo começar?

    Siga SEMPRE as nossas Carreiras , elas vão te orientar em todos os sentidos. Os cursos já estão organizados em categorias e carreiras para facilitar seu aprendizado.
    Nossa sugestão para aprendizado é começar pelo Backend e seguindo para Frontend e Mobile.

    • Backend
    • Frontend
    • Mobile

  • Os cursos ensinam tudo que preciso?

    Nenhum curso no mundo vai te ensinar tudo, desculpa ser sincero! Os cursos são uma base, eles fornecem por volta de 30% do que você precisa aprender, o resto é com você, com dedicação e MUITA prática.

  • O que eu devo estudar?

    Java ou .NET? Angular ou React? Xamarin ou Flutter? A resposta é simples e direta: "Você já sabe o básico?"

    Se você ainda não sabe BEM o básico, ou seja, os fundamentos, OOP, SOLID, Clean Code, está perdendo tempo estudando Frameworks ou até coisas mais avançadas como Docker. Foque nos seus objetivos primeiro.
    Agora se você está indeciso sobre qual Framework estudar, a boa notícia é que o mercado neste momento está bem aquecido e você tem várias oportunidade. Desta forma o que levaríamos em conta para tomar esta decisão seria:

    • Já sei o básico
    • O Framework/Tecnologia tem mercado onde eu estou (região)
    • O Framework/Tecnologia é utilizado em uma empresa onde quero atual
    • O Framework/Tecnologia resolve meu problema
    • Eu gosto de utilizar o Framework/Tecnologia

  • Estou pronto para estudar no balta.io?

    Com certeza! O primeiro passo é começar e você pode fazer isto agora mesmo!

    Começar de graça

Ainda tem dúvidas?





Assine nosso Newsletter

Receba em primeira mão todas as nossas novidades.

Cadastrar


balta.io

Sobre

  • Como funciona?
  • Seja Premium
  • Agenda
  • Blog
  • Todos os cursos

Cursos

  • Frontend
  • Backend
  • Mobile
  • Fullstack

Suporte

  • Termos de uso
  • Privacidade
  • Cancelamento
  • Central de ajuda

Redes Sociais

  • Telegram
  • Facebook
  • Instagram
  • YouTube
  • Twitch
  • LinkedIn
  • Discord