在Ruby中使用继承进行多态

Ruby| 使用继承的多态

在本教程中,我们将研究Ruby中的多态性。众所周知,Ruby是一种纯粹的面向对象语言,而多态性是任何面向对象语言的重要特征之一。您一定很难理解带有标题的主题,但是不要担心,阅读本文后,您的所有疑惑都将清除。其余内容全部涉及Ruby中的多态性以及语法和演示程序代码,以使您更好地理解。

我们都知道这一点,但让我再说一遍,多态是两个单词“ poly”“ Morph”的加法。这里的“ poly”一词是指许多,而“ Morph”是指形式。因此,总的来说,我们可以说多态是一种事物具有多种形式的属性。在计算机术语SP中,可以将多态称为一种方法,在该方法中,用户可以调用传递不同对象作为参数的相同方法。

多态是一个属性,其中类具有不同类型的功能,但它们共享相同的接口。可以在两种子类别下研究多态性,即

  • 在继承的帮助下实现多态

  • 鸭式打字帮助多态

在本教程中,我们将仅在继承的帮助下研究多态性子类别。

首先让我们了解继承,这是子类继承父类属性的属性。

您可以在以下程序代码的帮助下,通过继承来了解多态实现

示例

=begin
  Ruby program to demonstrate polymorphism 
  with Inheritance
=end	

class Fruit
  def tastetype
    puts "Sour fruit."
  end
end

class Orange<Fruit
  def tastetype
    puts "Sour-Sweet Fruit"
  end
end

class Apple<Fruit
  def tastetype
    puts "Sweet Fruit"
  end
end

fruit = Fruit.new
fruit.tastetype
fruit = Orange.new
fruit.tastetype
fruit = Apple.new
fruit.tastetype

输出结果

Sour fruit.
Sour-Sweet Fruit
Sweet Fruit

说明:

在上述代码的帮助下,您必须在Inheritance的帮助下多态性有了清晰的了解。在这里,方法滋味类型是在对象Orange和Apple的帮助下调用的。Orange和Apple类具有相同的父类水果。astetype是他们从其父类Fruit继承的方法。

现在,让我们了解Duck Typing,这只是一个想法,它可以看到对象可以完成的工作,而不是对象可以完成的工作,换句话说,您可以说可以在对象而不是类上实现什么实例的

您可以在以下程序代码的帮助下,通过鸭子输入来了解多态性实现

示例

=begin
  Ruby program to demonstrate polymorphism 
  using duck typing
=end	

class College
  def enters
    puts "A student enters"
  end
  
  def type(student)
    student.type
  end
  
  def course(student)
    student.course
  end
end

class Ug
  def type
    puts "student is a under graduate student"
  end
  
  def course
    puts "BCA student"
  end
end

class Pg
  def type
    puts "student is a post graduate student"
  end
  
  def course
    puts "MCA student"
  end
end

college = College.new
puts "This student is Under graduate"
stu = Ug.new
college.type(stu)
college.course(stu)

puts "This student is Post graduate"
stu = Pg.new
college.type(stu)
college.course(stu)

输出结果

This student is Under graduate
student is a under graduate student
BCA student
This student is Post graduate
student is a post graduate student
MCA student

说明:

在上述代码的帮助下,您必须借助Duck Typing清楚地了解了多态性。在这里,对象stu在使用College类的功能(例如其类型和课程)方面发挥着作用。