Ruby方法覆盖
Ruby中的方法重写
方法覆盖只是意味着在同一范围内定义了两种方法,它们都用于执行不同的任务。此功能以支持继承的面向对象语言提供。继承不过是一种机制,子类对象可以通过该机制访问超类的方法。在“方法重写”中,在基类和派生类中存在两个相同名称的方法,但功能不同。覆盖以派生类或子类的方法替换或覆盖派生类方法的实现的方式进行。
方法覆盖的一般视图如下所示:
class Parent def Method end end class Child def Method end end
您可以观察到两种方法的名称相同。现在,借助示例,让我们了解它们的功能差异:
=begin Ruby program to demonstrate method overriding =end class Parent def prnt for i in 0..5 puts "Parent class method" end end end class Child < Parent def prnt for i in 0..5 puts "Child class method" end end end ob1=Child.new #类实例化 ob1.prnt
输出结果
Child class method Child class method Child class method Child class method Child class method Child class method
您可以在上面的代码中观察到子类和父类方法都具有相同的名称,但它们的用途不同。
通过下面给出的示例可以更广泛地理解该概念,
=begin Ruby program to demonstrate method overriding. =end class Dollar def initialize puts "Enter amount in dollar" @dlr=gets.chomp.to_f end def rupee puts "#{@dlr}$ = #{71.23*@dlr} inr" end end class Yen < Dollar def initialize puts "Enter amount in Yen" @yn=gets.chomp.to_f end def rupee puts "#{@yn} Yen = #{0.67*@yn} inr" end end ob1=Dollar.new ob1.rupee ob2=Yen.new ob2.rupee
输出结果
Run 1: Enter amount in dollar 12 12.0$ = 854.76 inr Enter amount in Yen 900 900.0Yen = 603.0 inr Run 2: Enter amount in dollar 190.23 190.23$ = 13550.0829 inr Enter amount in Yen 890.23 890.23 Yen = 596.4541 inr
上面的代码有两个名称相同的方法“卢比”。在方法重写的情况下,子类和超类中都可以存在相同名称的方法。在这里,我们正在创建子类和父类的对象,并且它们正在调用其方法。如果仅创建了子类对象,则它必须已替换了父类方法。请记住,您不能覆盖私有方法。