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.fetchOutput:
Rex is eating
Rex fetches the ballmethod 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
endOutput:
breathing
undefined method `fetch' for an instance of Catsuperclass 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.superclassOutput:
Animal
Object
BasicObjectPewarisan 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'Tantangan
MudahLengkapi 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
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classVariabel instansmethod dan selfto_s dan inspectRingkasan: Kartu Perpustakaan4Enkapsulasi
private methodprotected methodprivate setterMelindungi StatusUlasan, Mesin Penjual Otomatis7Polimorfisme dan Duck Typing
PolimorfismeDuck TypingMethod Abstrakcase dan classRingkasan: Method Pembayaran2Accessor dan self
Pembaca dan PenulisSetter Kustomself dalam methodIdentitas dan KesetaraanRangkuman: Daftar Kontak8Special method
Kesetaraan dan hashOperator methodPengindeksan dan penambahanKoleksi kustomRingkasan: Pecahan11Proyek: Manajemen Perpustakaan
Buku dan AnggotaMeminjam Buku3Method dan Variabel class
Method classVariabel instance classKonstantaMethod pabrikRangkuman: Kode KuponLatihan sendiri: Compiler Ruby online