
protectedとprivate
class Foo
def bar(obj=nil)
foo
self.foo
obj.foo
end
protected
def foo
p 'foo'
end
end
Foo.new.bar(Foo.new)
class Foo
def bar(obj=nil)
foo
self.foo
obj.foo
end
private
def foo
p 'foo'
end
end
Foo.new.bar(Foo.new)
module内定数
module M
def foo
p CONST
end
end
class Hoge
CONST = 'foo'
include M
end
Hoge.new.foo
module M
def foo
p Hoge::CONST
end
end
undef_methodとremove_methodの違い
undef_method
はスーパークラスに同名のメソッドが存在しても、nomethod errorが発生する
remove_method
の場合は、スーパークラスに同名のメソッドが存在すると、スーパークラスのメソッドが呼ばれる
class Foo
def foo
p 'foo'
end
end
class Bar < Foo
def foo
p 'bar'
end
end
class Bar
remove_method :foo
end
Foo.new.foo
Bar.new.foo
class Hoge
def hoge
p 'hoge'
end
end
class Piyo < Hoge
def hoge
p 'hoge'
end
end
class Piyo
undef_method :hoge
end
Hoge.new.hoge
Piyo.new.hoge
class Foo
def foo
'foo'
end
end
class Bar < Foo
def foo
super + 'bar'
end
alias bar foo
undef foo
end
Bar.new.bar
class Piyo
def piyo
'piyo'
end
end
class Hoge < Piyo
alias hoge piyo
def piyo
super + 'hoge'
end
undef piyo
end
Hoge.new.piyo
pメソッドと、putsメソッドのオーバライド
- pはinspect
- putsはto_s
- それぞれでオーバライドできる
class Person
def initialize(name)
@name = name
end
def inspect
"My name is #{@name}"
end
def to_s
"to_s method override #{@name}"
end
end
p Person.new('taro')
puts Person.new('hanako')
コメントを残す