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