Ruby 类和对象学习笔记
1. 类和实例
在 Ruby 中,一切皆为对象,每个对象都属于某个类。类可以看做是对象的模板,表示该类对象具有哪些属性和行为。我们可以通过定义类来创建新的对象。
定义类的语法如下:
rubyCopy Codeclass ClassName
# code
end
其中 ClassName
为类名,# code
表示类中包含的代码。
我们通过 new
方法来创建该类的实例。例如:
rubyCopy Codeclass Person
def say_hello
puts "Hello!"
end
end
person = Person.new
person.say_hello # 输出 "Hello!"
2. 属性和方法
类中可以定义属性和方法。属性指对象具有的某些特征,例如人的姓名、年龄等;方法指对象可以执行的操作,例如人可以说话、走路等。
定义属性
在 Ruby 中,我们可以通过 attr_reader
、attr_writer
和 attr_accessor
定义属性。分别对应只读、只写和读写三种访问方式。
rubyCopy Codeclass Person
attr_reader :name # 只读属性 name
attr_accessor :age # 读写属性 age
def initialize(name, age)
@name = name
@age = age
end
end
person = Person.new("Alice", 20)
puts person.name # 输出 "Alice"
puts person.age # 输出 20
person.age = 21 # 修改 age 属性值为 21
puts person.age # 输出 21
定义方法
定义方法的语法如下:
rubyCopy Codeclass ClassName
def method_name(arguments)
# code
end
end
其中 method_name
是方法名,arguments
是方法的参数列表,# code
表示方法体。
举个例子:
rubyCopy Codeclass Person
def initialize(name, age)
@name = name
@age = age
end
def say_hello
puts "Hello, I'm #{@name}, and I'm #{@age} years old."
end
end
person = Person.new("Alice", 20)
person.say_hello # 输出 "Hello, I'm Alice, and I'm 20 years old."
3. 继承
在 Ruby 中,我们可以通过继承来创建新的类。子类可以继承父类的属性和方法,并可以添加新的属性和方法。
继承的语法如下:
rubyCopy Codeclass ChildClass < ParentClass
# code
end
其中 ChildClass
是子类,ParentClass
是父类,# code
表示子类中包含的代码。
举个例子:
rubyCopy Codeclass Animal
def move
puts "Move!"
end
def eat
puts "Eat!"
end
end
class Dog < Animal
def bark
puts "Wang! Wang!"
end
end
dog = Dog.new
dog.move # 输出 "Move!"
dog.eat # 输出 "Eat!"
dog.bark # 输出 "Wang! Wang!"
4. 多态
多态是对象的一种属性,指不同的对象可以执行相同的方法,产生不同的结果。这样可以提高代码的复用性和可维护性。
举个例子:
rubyCopy Codeclass Animal
def make_sound
# 抛出异常,需要子类实现该方法
raise "NotImplementedError"
end
end
class Dog < Animal
def make_sound
puts "Wang! Wang!"
end
end
class Cat < Animal
def make_sound
puts "Miao~ Miao~"
end
end
animals = [Dog.new, Cat.new]
animals.each do |animal|
animal.make_sound
end
上述代码创建了一个 Animal
类和两个子类 Dog
和 Cat
。它们都有自己的 make_sound
方法,但执行结果不同。我们将它们放到一个数组中,并逐一调用其 make_sound
方法,就可以看到多态的效果。