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 Java, 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.
Java
Classe #1 – Principal
package org.desenvolvimentoaberto;
public class Principal {
public 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();
System.out.println();
// Construtor Override
Bicicleta bike2 = new Bicicleta("XA 200", "Aluminio", "Pastilhas", "Aluminio");
bike2.bicicleta();
System.out.println();
// 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();
}
}
Classe #2 – Bicicleta
package org.desenvolvimentoaberto;
public 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 ()
{
System.out.println(" Bicicleta:" + modelo );
System.out.println(" Quadro:" + quadro );
System.out.println(" Rodas:" + rodas );
System.out.println(" Freios:" + freios );
}
}
Classe #3 – BicicletaMontanha (Sub Classe)
package org.desenvolvimentoaberto;
public class BicicletaMontanha extends Bicicleta {
public String marchas;
public String amortecedores;
public String garrafa;
public String gps;
//Metodo Override
public void bicicleta ()
{
System.out.println(" Bicicleta:" + modelo );
System.out.println(" Quadro:" + quadro );
System.out.println(" Rodas:" + rodas );
System.out.println(" Freios:" + freios );
System.out.println(" Marchas:" + marchas );
System.out.println(" Amortecedores:" + freios );
System.out.println(" Garrafa:" + garrafa );
System.out.println(" Gps:" + gps );
}
BicicletaMontanha()
{
}
}

