Inheritance (herança)
Programação orientada a objetos permite que classes possam herdar estados e comportamentos comuns usados de outras classes. Neste exemplo, bicicleta torna-se agora a superclasse de MountainBike. Na linguagem de programação, cada classe é permitido ter uma superclasse direta, e cada superclasse tem o potencial para um número ilimitado de subclasses.
Override
Métodos Override (substituição), em programação orientada a objeto, é um recurso de linguagem que permite que uma subclasse ou classe filha possa fornecer uma implementação específica de um método que já é fornecido por uma de suas superclasses ou classes pai.
A implementação Override das subclasses substitui a implementação na superclasse, fornecendo um método que tem o mesmo nome, mesmos parâmetros ou assinatura, e mesmo tipo de retorno como o método na classe pai.
This
É usado para fazer auto-referência ao próprio contexto em que se encontra e sempre será a própria classe ou o objeto já instanciado.
Dentro de um método de instância ou um construtor, this é uma referência para o objeto atual – o objeto cujo método ou construtor é chamado. Você pode se referir a qualquer membro do objeto atual de dentro de um método de instância ou um construtor usando this.
Exemplo:
Neste exemplo damos a classe MountainBike todos os mesmos campos e métodos da classe bicicleta, e ainda permite que seu código se concentre exclusivamente sobre as características que a tornam única. Isso faz do código de suas subclasses fáceis de ler. Usamos metodos Override neste exemplo de duas maneiras, para substituir um metodo da subclasse e adicionar mais um construtor com parametros. O comando this referencia os campos da própria classe.
No entanto, você deve tomar cuidado para documentar corretamente o estado e o comportamento que cada superclasse define, uma vez que o código não irá aparecer no arquivo de origem de cada subclasse.
C#
Classe #1 – Principal
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesenvolvimentoAberto {
class Program
{
static void Main(string[] args)
{
// Metodo com Construtor Default
Bicicleta bike1 = new Bicicleta();
bike1.modelo = "ZR069";
bike1.quadro = "Ferro";
bike1.rodas = "Ferro";
bike1.freios = "Pastilhas";
bike1.bicicleta();
Console.WriteLine();
// Construtor Override
Bicicleta bike2 = new Bicicleta("XA 200", "Aluminio", "Pastilhas", "Aluminio");
bike2.bicicleta();
Console.WriteLine();
// Herança - Montain Bike
BicicletaMontanha bike3 = new BicicletaMontanha();
bike3.modelo = "Attack 500";
bike3.quadro = "Fibra de Carbono";
bike3.rodas = "Aluminio";
bike3.freios = "Disco";
bike3.amortecedores = "R3000";
bike3.garrafa = "Aluminio 500ml";
bike3.marchas = "18 Velocidades";
bike3.gps = "Discovery 2.5";
// Metodo Override
bike3.bicicleta();
Console.ReadKey();
}
}
}
Classe #2 – Bicicleta
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesenvolvimentoAberto
{
class Bicicleta
{
public string modelo;
public string quadro;
public string freios;
public string rodas;
// Construtor Default
public Bicicleta()
{}
// Construtor Override
public Bicicleta (string modelo, string quadro, string freios, string rodas)
{
this.modelo = modelo;
this.quadro = quadro;
this.rodas = rodas;
this.freios = freios;
}
public void bicicleta ()
{
Console.WriteLine(" Bicicleta:" + modelo );
Console.WriteLine(" Quadro:" + quadro );
Console.WriteLine(" Rodas:" + rodas );
Console.WriteLine(" Freios:" + freios );
}
}
}
Classe #3 – BicicletaMontanha (Sub Classe)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesenvolvimentoAberto
{
class BicicletaMontanha : Bicicleta
{
public string marchas;
public string amortecedores;
public string garrafa;
public string gps;
//Metodo Override
public void bicicleta ()
{
Console.WriteLine(" Bicicleta:" + modelo );
Console.WriteLine(" Quadro:" + quadro );
Console.WriteLine(" Rodas:" + rodas );
Console.WriteLine(" Freios:" + freios );
Console.WriteLine(" Marchas:" + marchas );
Console.WriteLine(" Amortecedores:" + freios );
Console.WriteLine(" Garrafa:" + garrafa );
Console.WriteLine(" Gps:" + gps );
}
public BicicletaMontanha()
{
}
}
}


Hey, muito legal o artigo, mas acredito que o compilador ficará confuso na “Classe #3 – BicicletaMontanha (Sub Classe)”. Ele não vai entender se você está querendo usar OVERRIDE ou se está querendo usar HIDING.
Pra override, acredito eu que explicitamente deve-se usar a palavra reservada “override”:
public override void bicicleta() { … }
E pra hiding, acredito que deve-se usar a palavra new:
new public void bicicleta() { … }
Espero ter contribuído, obrigado, abraço.