这个章节介绍Class, Module, Object, BasicObject, Kernel中方法的关系

一般类中定义的实例方法,在对象中可以被对象直接调用

class Demo
  def demo
    puts "hello world"
  end
end

obj = Demo.new
obj.demo #"hello world"

所有类和模块的class方法都是Class类,这里说明所有的模块和类都是Class类的实例化对象

Demo = Class.new do
  def demo
    puts "hello"
  end
end

obj = Demo.new
obj.demo #"hello"

结合上面一般实例化对象和Class类和一般类的关系,可以得出结论

Class类的实例方法是一般类的类方法(可以被一般类直接调用,可以显示调用,也可以隐式调用)

Class.ancestors #[Class, Module, Object, PP::ObjectMixin, Kernel, BasicObject]

#superclass是Class类的实例方法
Class Demo
  superclass #隐式调用,返回Object
  self.superclass #显式调用,返回Object
  Demo.superclass #显式调用,返回Object
end

#通过Class.ancestors的结果可以得到,所有继承的实例方法都是可以用在普通类中,可以被普通类隐式或者显式调用

对于普通类,普通类中定义的实例方法,可以被相应的实例化对象调用

class Demo
  def demo
    puts "hello world"
  end
end

obj = Demo.new
obj.demo #"hello world"

Demo.ancestors # [Demo, Object, PP::ObjectMixin, Kernel, BasicObject]
#通过Demo.ancesotrs可以得到,所有Demo中的父类,其实例方法都是可以被Demo的实例化对象调用

results matching ""

    No results matching ""