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 da classe BicicletaMontanha. Na linguagem de programação Ruby, 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.
@ (Arroba – Ruby)
Uma variável associada ao sinal de arroba em Ruby significa uma variável da instancia ex: @variavavel.
Super
Usando super você irá chamar o mesmo método, mas, tal como definido na superclasse e consequentemente lhe fornecendo o resultado.
Exemplo:
Neste exemplo damos a classe BicicletaMontanha 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 métodos Override neste exemplo de duas maneiras, para substituir um método da subclasse e adicionar mais um construtor com parâmetros.
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.
Ruby
#!/usr/bin/env ruby # Desenvolvimento Aberto # Herança.rb # Define classe class Bicicleta # Define métodos assesores attr_accessor :modelo, :quadro, :rodas, :freios # Construtor def initialize(modelo, quadro, rodas, freios) @modelo = modelo @quadro = quadro @rodas = rodas @freios = freios end # Imprime modelo def imprimeModelo() puts "Modelo : " + @modelo puts "Quadro: " + @quadro puts "Rodas: " + @rodas puts "Freios: " + @freios end end # Classe com Herança class BicicletaMontanha < Bicicleta # Novos métodos assessores attr_accessor :marchas, :amortecedores, :garrafa, :gps # Construtor da classe def initialize(modelo, quadro, rodas, freios, marchas, amortecedores, garrafa, gps) # Super inicializa construtor da herança super(modelo, quadro, rodas, freios) # Inicializa variáveis @marchas = marchas @amortecedores = amortecedores @garrafa = garrafa @gps = gps end # Método Override - sobrepõe o metodo da classe super def imprimeModelo() puts "Modelo : " + modelo puts "Quadro: " + quadro puts "Rodas: " + rodas puts "Freios: " + freios puts "Marchas: " + @marchas puts "Amortecedores: " + @amortecedores puts "Garrafa: " + @garrafa puts "Gps: " + @gps end end # cria instancia da classe Bicicleta bike1 = Bicicleta.new("Street", "Aço", "Ferro", "Pastilhas") puts "Bicicleta Numero ---> 1:" bike1.imprimeModelo() # Cria instancia da classe BicicletaMontanha bike2 = BicicletaMontanha.new("Montain Bike", "Carbono", "Aluminio", "Disco", "10 M", "RX 3000 oil", "Aliminio 500ml", "Discovery 300xs") puts "\nBicicleta Numero ---> 2:" bike2.imprimeModelo()