Menu
Coddy logo textTech

Alt sınıflar

Coddy'nin Ruby Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 22 / 57.

Kalıtım, mevcut bir sınıf üzerine yeni bir sınıf oluşturur. class Dog < Animal, Dog sınıfını, onun üst sınıfı olan Animal sınıfının bir alt sınıfı yapar. Bir köpek, initialize dâhil olmak üzere bir hayvanın tüm metotlarına ve ayrıca Dog sınıfının eklediği metotlara sahiptir:

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

Çıktı:

Rex is eating
Rex fetches the ball

Eklenen yöntemler yalnızca alt sınıfa aittir. Sıradan bir Animal bunlara sahip değildir ve Cat gibi kardeş bir sınıf, Dog sınıfının yöntemlerini göremez:

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

Çıktı:

breathing
undefined method `fetch' for an instance of Cat

superclass bir sınıfın üst sınıfını belirtir. Bir Ruby sınıfının tam olarak bir üst sınıfı vardır ve < olmadan bildirilen bir sınıf, her nesneye to_s ve inspect gibi metotlar sağlayan Object sınıfından kalıtım alır:

class Animal
end

class Dog < Animal
end

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

Çıktı:

Animal
Object
BasicObject

Kalıtım, bir türdür ilişkisine uyar: bir köpek bir hayvandır, bir tasarruf hesabı bir hesaptır. Paylaşılan davranış bir kez üst sınıfa konur ve her alt sınıf, onu farklı kılan özellikleri ekler. Bu bölümde her sınıf kendi dosyasında bulunur ve üst sınıfın dosyası önce yüklenir:

# main.rb
require_relative 'animal'   # önce süper sınıf
require_relative 'dog'      # class Dog &lt; Animal Animal'e ihtiyaç duyar
require_relative 'cat'
challenge icon

Görev

Kolay

Sınıfları tamamlayın. Vehicle, bir name ve bir wheels sayısı depolar ve Mini has 4 wheels döndüren describe yöntemine sahiptir. Car ve Bike, initialize tanımlamayan Vehicle alt sınıflarıdır. Car, Mini says beep döndüren honk yöntemini; Bike ise BMX rings döndüren ring yöntemini ekler.

Sağlanan kod, car Mini veya bike BMX satırlarını okur, 4 tekerlekli bir Car veya 2 tekerlekli bir Bike oluşturur ve describe yönteminin sonucunu, sesi (honk veya ring) ve nesnenin sınıfının üst sınıfını yazdırır.

Kodunuz vehicle.rb, car.rb ve bike.rb dosyalarına gider. main.rb, sağlanan giriş/çıkış kodunu içerir ve düzenlenemez.

Kendin dene

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

# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Ruby derleyicisi