Menu
Coddy logo textTech

Sottoclassi

Fa parte della sezione Programmazione orientata agli oggetti del percorso Ruby di Coddy. Lezione 22 di 57.

L'ereditarietà crea una nuova classe a partire da una esistente. class Dog < Animal rende Dog una sottoclasse di Animal, la sua superclasse. Un cane ha tutti i metodi di un animale, incluso initialize, oltre ai metodi aggiunti da Dog:

class Animal
  attr_reader :name

  def initialize(name)
    @name = name
  end

  def eat
    "#{name} is eating"
  end
end

class Dog < Animal
  def fetch
    "#{name} fetches the ball"
  end
end

rex = Dog.new("Rex")
puts rex.eat
puts rex.fetch

Output:

Rex is eating
Rex fetches the ball

I metodi aggiunti appartengono solo alla sottoclasse. Un semplice Animal non li possiede e una classe sorella come Cat non vede i metodi di Dog:

class Animal
  def breathe
    "breathing"
  end
end

class Dog < Animal
  def fetch
    "fetching"
  end
end

class Cat < Animal
end

puts Cat.new.breathe
begin
  Cat.new.fetch
rescue NoMethodError => e
  puts e.message
end

Output:

breathing
undefined method `fetch' for an instance of Cat

superclass indica la classe genitore di una classe. Una classe Ruby ha esattamente una superclasse e una classe dichiarata senza < eredita da Object, che fornisce a ogni oggetto metodi come to_s e inspect:

class Animal
end

class Dog < Animal
end

puts Dog.superclass
puts Animal.superclass
puts Object.superclass

Output:

Animal
Object
BasicObject

L'ereditarietà corrisponde a una relazione è un: un cane è un animale, un conto di risparmio è un conto. Il comportamento condiviso viene inserito una sola volta nella superclasse, e ogni sottoclasse aggiunge ciò che la distingue. In questa sezione ogni classe si trova nel proprio file e il file della superclasse viene caricato per primo:

# main.rb
require_relative 'animal'   # prima la superclasse
require_relative 'dog'      # class Dog < Animal richiede Animal
require_relative 'cat'
challenge icon

Sfida

Facile

Completa le classi. Vehicle memorizza un name e un numero di wheels e ha describe, che restituisce Mini has 4 wheels. Car e Bike sono sottoclassi di Vehicle che non definiscono initialize. Car aggiunge honk, che restituisce Mini says beep, e Bike aggiunge ring, che restituisce BMX rings.

Il codice fornito legge righe car Mini o bike BMX, crea una Car con 4 ruote o una Bike con 2 e stampa describe, il suono (honk o ring) e la superclasse della classe dell'oggetto.

Il tuo codice va in vehicle.rb, car.rb e bike.rb. main.rb contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

require_relative 'vehicle'
require_relative 'car'
require_relative 'bike'

# Supplied input/output code: keep it as it is
input = []
while (line = gets)
  input << line.chomp
end
input.each do |line|
  kind, name = line.split(" ", 2)
  if kind == "car"
    v = Car.new(name, 4)
    sound = v.honk
  else
    v = Bike.new(name, 2)
    sound = v.ring
  end
  puts v.describe
  puts sound
  puts v.class.superclass
end
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Ruby online