ESS多版本 Ruby中的类和多态

小语咒?

馆主
2022/10/04
13
5
874
23
134.175.88.34

最近在学习国外大佬的Ruby教程,我总结了一下知识点,方便小伙伴们复习。​

类的继承​

类可以有祖先,就像家谱一样。例如,String 类的祖先链是:

Kernel -> Object -> Comparable -> String

Fixnum 类的祖先链是:

Kernel -> Object -> Comparable -> Numeric -> Precision -> Integer -> Fixnum

方法查找​

当你在一个对象上调用方法时,会从该对象所属的类开始查找,如果找不到,会依次向上查找其祖先类,直到找到方法或引发 NoMethodError 错误。

is_a? 方法​

is_a? 方法可以检查对象是否属于某个类或其祖先类。例如:

14.is_a?(Numeric) #=> true
14.is_a?(Object) #=> true
14.is_a?(String) #=> false

创建自定义类​

你可以创建自己的类:

class CustomClass
end

创建类的实例:

var = CustomClass.new

添加实例方法:

class CustomClass
def say_hello
print "Hello!"
end
end

var.say_hello # 打印 "Hello!"

类方法​

类方法是定义在类本身上的方法,而不是实例上的方法:

class CustomClass
def self.say_hello
print "Hello!"
end
end

CustomClass.say_hello # 打印 "Hello!"

构造函数​

构造函数 initialize 在创建对象时被调用:

class CustomClass
def initialize
p "This object was just created!"
end
end

var = CustomClass.new # 打印 "This object was just created!"

构造函数可以接受参数:

class CustomClass
def initialize(string)
print string
end
end

var = CustomClass.new("Hello!") # 打印 "Hello!"

添加和覆盖方法​

你可以随时向类添加或覆盖方法:

class CustomClass
def say_hello
print "Hello!"
end
end

CustomClass.new.say_hello # 打印 "Hello!"

class CustomClass
def say_hello
print "Hi!"
end
end

CustomClass.new.say_hello # 打印 "Hi!"

继承​

新类默认继承自 Object。你可以通过 < 指定继承其他类:

class One
def say_hello
print "Hello!"
end
end

class Two < One
end

Two.new.say_hello # 打印 "Hello!"

super 关键字​

super 关键字用于调用超类中的同名方法:

class One
def hi
p "Hi!"
end
end

class Two < One
def hi
p "Hello!"
super
end
end

Two.new.hi # 打印 "Hello!" 然后打印 "Hi!"
 

在线成员

论坛统计

主题
474
消息
2,137
成员
2,909
最新成员
小灵喵~