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

上面的代码有两个名称相同的方法“卢比”。在方法重写的情况下,子类和超类中都可以存在相同名称的方法。在这里,我们正在创建子类和父类的对象,并且它们正在调用其方法。如果仅创建了子类对象,则它必须已替换了父类方法。请记住,您不能覆盖私有方法。