Ruby 面向对象学习笔记

类(Class)

Ruby 是面向对象的编程语言,所有东西都是对象。类是一个对象的蓝图,它定义了一组属性和方法。在 Ruby 中,通过 class 关键字来定义类。例如,下面定义了一个名为 Person 的类:

rubyCopy Code
class 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 Code
person = Person.new("Tom", 30) person.say_hello

这将输出以下内容:

Copy Code
Hello, my name is Tom and I'm 30 years old.

继承(Inheritance)

继承是面向对象编程中很重要的概念之一,它允许创建一个新类从一个现有类派生而来。新类将从现有类继承其属性和方法,同时还可以添加自己的属性和方法。

例如,我们可以创建一个 Student 类,它继承了 Person 类:

rubyCopy Code
class 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 Code
student = Student.new("Jerry", 18, 12) student.say_hello

这将输出以下内容:

Copy Code
Hello, my name is Jerry and I'm 18 years old. I'm a student in grade 12.

多态(Polymorphism)

多态是一种将不同的对象视为同一个类型的概念。在面向对象编程中,多态可以通过使用抽象类或接口来实现。

Ruby 不支持抽象类或接口,但是它允许使用多态。例如,我们可以创建一个 Animal 类和两个子类 DogCat

rubyCopy Code
class 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 对象,而是想要创建它的子类对象。

DogCat 类中,我们覆盖了 speak 方法,并返回各自不同的声音。

现在我们可以创建 DogCat 对象,它们都是 Animal 类型的:

rubyCopy Code
def 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 的面向对象编程。