Ruby 继承
Ruby是理想的面向对象的语言。在一个面向对象的编程语言中,继承是最重要的特征之一。继承允许程序员将一个类的特性继承到另一个类。Ruby只支持单类继承 ,它不支持多类继承,但它支持mixins。mixins_ 是为了在Ruby中实现多重继承,但它只继承接口部分。
继承提供了 “可重用性 “的概念,也就是说,如果一个程序员想创建一个新的类,而有一个类已经包括了程序员想要的一些代码,那么他或她可以从现有的类中派生出一个新的类。通过这样做,可以增加对现有类的字段和方法的重用,而不会产生额外的代码。
在上图中,A类是超类,B类是子类,或者你可以说B类是从A类派生出来的(Base Class)。
继承中的关键术语
- 超类: 其特征被继承的类被称为超类或基类或父类。
- 子类: 从另一个类派生出来的类被称为子类或派生类或子类。你也可以在基类方法和对象之外添加它自己的对象、方法等等。
注意: 默认情况下,Ruby中的每个类都有一个父类。在 Ruby 1.9 之前,Object类是所有其他类的父类,或者你可以说它是类层次结构的根。但是从Ruby 1.9 版本开始, BasicObject类 是Ruby中所有其他类的超级类(父类)。Object类是BasicObject类的一个子类。
语法
subclass_name < superclass_name
例子
# Ruby program to demonstrate
# the Inheritance
#!/usr/bin/ruby
# Super class or parent class
class GeeksforGeeks
# constructor of super class
def initialize
puts "This is Superclass"
end
# method of the superclass
def super_method
puts "Method of superclass"
end
end
# subclass or derived class
class Sudo_Placement < GeeksforGeeks
# constructor of deriver class
def initialize
puts "This is Subclass"
end
end
# creating object of superclass
GeeksforGeeks.new
# creating object of subclass
sub_obj = Sudo_Placement.new
# calling the method of super
# class using sub class object
sub_obj.super_method
输出
This is Superclass
This is Subclass
Method of superclass
重写父类或超类方法: 方法重写是Ruby的一个非常有效的功能。在方法覆盖中,子类和超类包含相同的方法名称,但执行不同的任务,或者我们可以说一个方法覆盖另一个方法。如果超类包含一个方法,而子类也包含相同的方法名,那么子类的方法将被执行。
例子
# Ruby program to demonstrate
# Overriding of Parent or
# Superclass method
#!/usr/bin/ruby
# parent class
class Geeks
# method of the superclass
def super_method
puts "This is Superclass Method"
end
end
# derived class 'Ruby'
class Ruby < Geeks
# overriding the method of the superclass
def super_method
puts "Override by Subclass"
end
end
# creating object of sub class
obj = Ruby.new
# calling the method
obj.super_method
输出
Override by Subclass
继承中super方法的使用: 该方法用于在子类中调用父类方法。如果该方法不包含任何参数,它会自动传递其所有参数。一个超级方法是由 super 关键字定义的。每当你想调用父类的同名方法时,你可以简单地写上 super 或 super()。
例子
# Ruby Program to demonstrate the
# use of super method
#!/usr/bin/ruby
# base class
class Geeks_1
# method of superclass accepting
# two parameter
def display a = 0, b = 0
puts "Parent class, 1st Argument: #{a}, 2nd Argument: #{b}"
end
end
# derived class Geeks_2
class Geeks_2 < Geeks_1
# subclass method having the same name
# as superclass
def display a, b
# calling the superclass method
# by default it will pass
# both the arguments
super
# passing only one argument
super a
# passing both the argument
super a, b
# calling the superclass method
# by default it will not pass
# both the arguments
super()
puts "Hey! This is subclass method"
end
end
# creating object of derived class
obj = Geeks_2.new
# calling the method of subclass
obj.display "Sudo_Placement", "GFG"
输出
Parent class, 1st Argument: Sudo_Placement, 2nd Argument: GFG
Parent class, 1st Argument: Sudo_Placement, 2nd Argument: 0
Parent class, 1st Argument: Sudo_Placement, 2nd Argument: GFG
Parent class, 1st Argument: 0, 2nd Argument: 0
Hey! This is subclass method