Ruby 面向对象学习笔记
类(Class)
Ruby 是面向对象的编程语言,所有东西都是对象。类是一个对象的蓝图,它定义了一组属性和方法。在 Ruby 中,通过 class 关键字来定义类。例如,下面定义了一个名为 Person 的类:
rubyCopy Codeclass Person
def initialize(name, age)
@name = name
@age = age
end
def say_hello
puts "Hello, my name is #{@name} and I'm #{@age} years old."
end
end
这里我们定义了一个 Person 类,它有两个属性 @name 和 @age,以及一个方法 say_hello。构造方法 initialize 用于初始化对象的属性值。
现在我们可以创建一个 Person 对象,并调用 say_hello 方法:
rubyCopy Codeperson = Person.new("Tom", 30)
person.say_hello
这将输出以下内容:
Copy CodeHello, my name is Tom and I'm 30 years old.
继承(Inheritance)
继承是面向对象编程中很重要的概念之一,它允许创建一个新类从一个现有类派生而来。新类将从现有类继承其属性和方法,同时还可以添加自己的属性和方法。
例如,我们可以创建一个 Student 类,它继承了 Person 类:
rubyCopy Codeclass Student < Person
def initialize(name, age, grade)
super(name, age)
@grade = grade
end
def say_hello
super
puts "I'm a student in grade #{@grade}."
end
end
这里我们定义了一个 Student 类,它从 Person 类继承了属性和方法,并添加了自己的属性 @grade 和方法 say_hello。在构造函数中,我们用 super 关键字调用了父类的构造函数来初始化 @name 和 @age 这两个属性。
现在我们可以创建一个 Student 对象,并调用 say_hello 方法:
rubyCopy Codestudent = Student.new("Jerry", 18, 12)
student.say_hello
这将输出以下内容:
Copy CodeHello, my name is Jerry and I'm 18 years old.
I'm a student in grade 12.
多态(Polymorphism)
多态是一种将不同的对象视为同一个类型的概念。在面向对象编程中,多态可以通过使用抽象类或接口来实现。
Ruby 不支持抽象类或接口,但是它允许使用多态。例如,我们可以创建一个 Animal 类和两个子类 Dog 和 Cat:
rubyCopy Codeclass Animal
def speak
raise NotImplementedError, "Subclasses must override this method."
end
end
class Dog < Animal
def speak
"Woof!"
end
end
class Cat < Animal
def speak
"Meow!"
end
end
在 Animal 类中,我们定义了一个 speak 方法,并抛出了一个 NotImplementedError 异常。因为我们不想直接创建 Animal 对象,而是想要创建它的子类对象。
在 Dog 和 Cat 类中,我们覆盖了 speak 方法,并返回各自不同的声音。
现在我们可以创建 Dog 或 Cat 对象,它们都是 Animal 类型的:
rubyCopy Codedef speak(animal)
animal.speak
end
dog = Dog.new
cat = Cat.new
puts speak(dog) # 输出 "Woof!"
puts speak(cat) # 输出 "Meow!"
在 speak 方法中,我们传入一个 Animal 对象,无论它是 Dog 还是 Cat,都会执行对应的 speak 方法。
结语
这是 Ruby 面向对象编程的一些基础知识和示例。希望这些笔记可以帮助你更好地理解 Ruby 的面向对象编程。