サブクラスを作成する場合は、「class サブクラス名 < 親クラス名」とします。また、superは親クラスの同名のメソッドを呼び出すものです。 早速見てみましょう。
class Robot
	def initialize(name)
		@name = name
		@x = @y = 0
	end
	def move(x, y)
		@x += x; @y += y
	end
	def to_s
		“#{@name}: #{@x},#{@y}”
	end
end
class FlyingRobot < Robot
	def initialize(name)
		super
		@z = 0
	end
	def move(x, y, z)
		super(x, y)
		@z += z
	end
	def to_s
		super + ",#{@z}"
	end
end
robo1 = Robot.new("ロボ1号")
puts robo1
robo1.move(10, 5)
puts robo1
robo2 = FlyingRobot.new("飛行ロボ")
puts robo2
robo2.move(5, 5, 30)
puts robo2
C:\rails>ruby test.rb ロボ1号: 0,0 ロボ1号: 10,5 飛行ロボ: 0,0,0 飛行ロボ: 5,5,30
手間を省略できますね♪
その他に、モジュールというものがあります。クラスのように、メソッドを記述します。
クラスの中にモジュールを取り込むことをミックスインといいます。
しかし、モジュールは親クラスにはなれず、親クラスを持つこともできませんが、ミックスインはできます。rubyは単一継承のため、複数の親クラスを持つことはできませんが、複数のモジュールを取り込むことができます。
module Radar
	def distance_to(other)
		Math.sqrt((self.x - other.x) **2 + (self.y - other.y) ** 2)
	end
end
class Robot
	include Radar
	attr_accessor :name, :x, :y
	def initialize(name)
		@name = name
		@x = @y = 0
	end
	def move(x, y)
		@x += x; @y += y
	end
end
robo1 = Robot.new("ロボ1号")
robo2 = Robot.new("ロボ2号")
robo2.move(12, 35)
puts "距離は #{robo1.distance_to(robo2)}です。"
C:\rails>ruby test.rb 距離は 37.0です。
なるほどね~。
 
					 
