Menu
CoddyTech

Subkelas

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 22 dari 57.

Inheritance membangun class baru berdasarkan class yang sudah ada. class Dog < Animal menjadikan Dog sebagai subclass dari Animal, yaitu superclass-nya. Dog memiliki semua method milik animal, termasuk initialize, ditambah method yang ditambahkan oleh 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

method yang ditambahkan hanya dimiliki oleh subclass. Animal biasa tidak memilikinya, dan class saudara seperti Cat tidak dapat mengakses method milik 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 menyebutkan parent dari sebuah class. Class Ruby memiliki tepat satu superclass, dan class yang dideklarasikan tanpa < mewarisi dari Object, yang memberikan setiap object method seperti to_s dan inspect:

class Animal
end

class Dog < Animal
end

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

Output:

Animal
Object
BasicObject

Pewarisan cocok untuk relasi is-a: anjing adalah hewan, rekening tabungan adalah rekening. Perilaku yang sama ditempatkan satu kali di superclass, lalu setiap subclass menambahkan hal yang membedakannya. Di bagian ini, setiap class berada dalam filenya sendiri, dan file superclass dimuat terlebih dahulu:

# main.rb
require_relative 'animal'   # superclass terlebih dahulu
require_relative 'dog'      # class Dog < Animal memerlukan Animal
require_relative 'cat'
challenge icon

Tantangan

Mudah

Lengkapi class-class tersebut. Vehicle menyimpan name dan jumlah wheels, serta memiliki describe, yang mengembalikan Mini has 4 wheels. Car dan Bike adalah subclass dari Vehicle yang tidak mendefinisikan initialize. Car menambahkan honk, yang mengembalikan Mini says beep, dan Bike menambahkan ring, yang mengembalikan BMX rings.

Code yang disediakan membaca baris car Mini atau bike BMX, membuat Car dengan 4 roda atau Bike dengan 2 roda, lalu mencetak describe, suara (honk atau ring), dan superclass dari class milik object tersebut.

Tulis kodemu di vehicle.rb, car.rb, dan bike.rb. main.rb berisi code input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

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

# Kode input/output yang disediakan: biarkan apa adanya
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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Ruby online