本人新手,在看到以下代码是不太明白,望高手解惑:
类A的实例变量@i可以被类B继承吗?
网址http://www.iteye.com/wiki/Ruby_Hacking_Guide/1266-chapter-i-ruby-language-to-minimize#1409
代码
class A
def initialize() # 在new的过程中调用
@i = "ok"
end
end
class B < A
def print_i()
p(@i)
end
end
B.new().print_i() # 显示"ok"
[quote]只有方法可以继承,只要调用继承方法(通过子类实例),就会发生实例变量赋值,也就是说,将它定义出来。[/quote]
首先说明一下,上面我的理解是错误的。
他这里理解为实例变量是不能被继承的。
继承的只是方法。
既然方法可以被继承,那些继承后的B类变成如下这样的:
[code="java"]
class B < A
def print_i()
p(@i)
end
def initialize() # 在new的过程中调用
@i = "ok"
end
end
B.new().print_i() # 显示"ok"
[/code]
首先我们知道:[color=darkblue][size=medium]Ruby语言是一门动态语言,因此Ruby的实例变量无须声明,每个实例变量都是在第一次出现时动态加入对象。 [/size][/color]
也就是说在new()对象B时,调用了initialize方法。在这个方法中遇到了“@i”,这时这个i动态的加入B对象,成为B对象的实例变量,所以B对象的所有方法可以访问这个i变量。
应该说明白了吧。
这段代码就是说明了实例变量可以被继承!~~有问题吗??