浏览 923 次
|
锁定老贴子 主题:protected,private的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-05-24 关键字: rotected,private的问题
class C
def initialize(name)
@name = name
end
def compare(c)
name == @name
end
protected
def name
@name
end
end
class D < C
end
d1 = D.new("fankai")
d2 = D.new("hello")
d2.name
puts d1.compare(d2)
这样的调用出错了。。 protected method `name' called for #<D:0x2b389d4 @name="hello"> (NoMethodError) 是protected不能在类外部显式调用么? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-05-24
我理解的是的,它只能由它的子类和本类的实例对象调用
要想外部调用必须声明为 public类型 |
|
| 返回顶楼 | |
|
最后更新时间:2007-06-01
protected方法不能用于使用外部的一个receiver来调用message
我把楼主的代码做了以下修改就好了. class C
def initialize(name)
@name = name
end
def compare(c)
name == @name
end
protected
def name
@name
end
end
class D < C
def name2(c)
c.name
end
end
d1 = D.new("fankai")
d2 = D.new("hello")
d2.name2(d2)
puts d1.compare(d2)
楼主可以参考这个帖子: http://www.itpub.net/614179.html phoenixlhan 写道
class C
def initialize(name)
@name = name
end
def compare(c)
name == @name
end
protected
def name
@name
end
end
class D < C
end
d1 = D.new("fankai")
d2 = D.new("hello")
d2.name
puts d1.compare(d2)
这样的调用出错了。。 protected method `name' called for #<D:0x2b389d4 @name="hello"> (NoMethodError) 是protected不能在类外部显式调用么? |
|
| 返回顶楼 | |





