クラスの継承
親クラス(スーパークラス)の機能を引き継いで、子クラス(サブクラス)を作成することができる。
コードの再利用性や拡張性を高める仕組み。
class AdminUser < class User
のように、「子クラス < 親クラス」で継承できる。
class User
def initialize(name)
@name = name
end
def hello
puts "Hello! I am #{@name}."
end
end
class AdminUser < User
def admin_hello
puts "Hello! I am #{@name} from AdminUser."
end
end
nakamura = User.new('Nakamura')
nakamura.hello
sato = AdminUser.new('Sato')
sato.hello
sato.admin_hello
上記を実行すると、
Hello! I am Nakamura. Hello! I am Sato. Hello! I am Sato from AdminUser.
と出力される。
※親クラスから子クラスのメソッドは呼び出せない。
メソッドのオーバーライド
子クラスの方で親クラスのメソッドを上書きする方法
ここでは、親クラスのhelloメソッドを子クラスの方でオーバーライドしていく。
class User
def initialize(name)
@name = name
end
def hello
puts "Hello! I am #{@name}."
end
end
class AdminUser < User
def admin_hello
puts "Hello! I am #{@name} from AdminUser."
end
def hello
puts 'Admin!'
end
end
nakamura = User.new('Nakamura')
nakamura.hello
sato = AdminUser.new('Sato')
sato.hello
sato.admin_hello
これを実行すると、
Hello! I am Nakamura. Admin! Hello! I am Sato from AdminUser.
になる。
helloメソッドが上書きされたのがわかる。
Integerの継承関係
BasicObject
↑
Object
↑
Numeric
↑
Integer
クラスの親クラスを確認するには、superclassメソッドを使う。