我们说我有一个带有公共访问者的A类:
class Test_A
attr_accessor :a
attr_accessor :b
attr_accessor :c
end
可以访问其实例变量,例如:
test = Test_A.new()
test.a = 3
我想继承Test_B中的类Test_A:
class Test_B < Test_A
private
attr_accessor :d
attr_accessor :e
end
现在也可以在Test_B中访问从Test_A继承的实例变量:
test = Test_B.new()
test.a = 3
我想实现以下目标:
有没有办法在子类中将方法和实例变量标记为私有?
只是一些背景:我正在开发一个基于rake的构建系统:有许多&#34; recipe&#34;将定义软件源的文件,如:
sw_pkg.srcs = "blabla.c blabla2.c"
sw_pkg.incs = "blabla.h blabla2.h"
&#34; sw_pkg&#34;可以是A类的实例。在这些配方中,所有访问者都必须可以从外部访问。
在Rakefile中,我扫描所有这些配方并使用B类,它定义了构建配方文件中定义的源的所有方法。但是,在Rakefile中,我不想修改来自&#34;外部&#34;
的A类派生的访问者的任何内容。答案 0 :(得分:2)
是的,有。
class Test_A
attr_accessor :d, :e
end
class Test_B < Test_A
private :d, :d=, :e, :e=
end
但我认为拥有私有访问器是没用的,因为如果你可以省略接收器,那么你就在Test_B
实例的上下文中,你可以直接访问实例变量而不使用访问器。