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.