Ruby 类关键字
最后修改日期:2025 年 4 月 27 日
本教程将解释如何使用 Ruby 的 class 关键字来创建面向对象程序。类是 Ruby 中基本的构建块。
class 关键字在 Ruby 中定义一个新类。类将数据和行为封装到可重用组件中。它们支持继承和混入(mixins)。
Ruby 类可以包含方法、常量和其他类定义。Ruby 中万物皆对象,类定义了对象的蓝图。
基本类定义
这个例子展示了 Ruby 中最简单的类定义。该类包含一个输出问候语的单一方法。
class Greeter
def greet
puts "Hello, Ruby!"
end
end
g = Greeter.new
g.greet
class 关键字开始定义,后跟类名。我们使用 new 创建一个实例,并调用其 greet 方法。类名应为常量(首字母大写)。
带初始化方法的类
initialize 方法在 Ruby 类中充当构造函数。创建新实例时会运行它。此示例自定义了问候语。
class Person
def initialize(name)
@name = name
end
def greet
puts "Hello, #{@name}!"
end
end
p = Person.new("John")
p.greet
initialize 方法接受一个 name 参数。实例变量(@name)存储对象状态。我们将参数传递给 new,它会将它们转发给 initialize。
类继承
Ruby 支持使用 < 运算符进行单重继承。此示例展示了一个基类和一个共享行为的派生类。
class Animal
def speak
puts "Animal sound"
end
end
class Dog < Animal
def speak
puts "Woof!"
end
end
a = Animal.new
a.speak
d = Dog.new
d.speak
Dog 继承自 Animal,但会覆盖 speak 方法。Ruby 首先在当前类中查找方法,然后在父类中查找。
类变量和类方法
类变量(@@)在所有实例之间共享。类方法使用 self. 前缀定义。这会跟踪实例计数。
class Counter
@@count = 0
def initialize
@@count += 1
end
def self.total
@@count
end
end
3.times { Counter.new }
puts "Total instances: #{Counter.total}"
每次创建新实例时,@@count 都会递增。类方法 total 返回计数。类方法是在类本身上调用的。
访问器方法
Ruby 为 getter/setter 方法提供了快捷方式。attr_reader、attr_writer 和 attr_accessor 简化了属性访问。
class Book
attr_reader :title
attr_accessor :author
def initialize(title, author)
@title = title
@author = author
end
end
b = Book.new("Ruby Guide", "Jane Doe")
puts b.title
b.author = "John Smith"
puts b.author
attr_reader 创建一个 getter,attr_accessor 创建两者。title 是只读的,而 author 可以更改。
模块作为混入(Mixins)
Ruby 类可以包含模块以获得其他功能。此示例展示了一个混入到类中的模块。
module Loggable
def log(message)
puts "[LOG] #{message}"
end
end
class Product
include Loggable
def initialize(name)
@name = name
log "Created product: #{@name}"
end
end
p = Product.new("Laptop")
Product 类从 Loggable 模块获得 log 方法。混入提供了类似多重继承的功能。
单例类
Ruby 允许使用单例类为单个对象定义方法。此示例向一个特定实例添加了一个方法。
class Dog
def bark
puts "Woof!"
end
end
d1 = Dog.new
d2 = Dog.new
def d1.special_bark
puts "Special woof!"
end
d1.bark
d1.special_bark
d2.bark
# d2.special_bark # Would raise NoMethodError
d1 获得了一个其他 Dog 实例无法使用的方法。单例类对于对象特定的行为很有用。
来源
本教程涵盖了 Ruby 的 class 关键字,并提供了演示核心 OOP 特性(如继承、混入和单例类)的示例。
作者
列出 所有 Ruby 教程。