Car*_*ter 7 language-agnostic access-levels
关于Java,C#,C++和PHP中的访问级别的一个常见误解是它适用于对象而不是类.也就是说,(比方说)X类的对象无法看到另一个X的私有成员.实际上,当然,访问级别是基于类的,一个X对象可以毫不费力地引用另一个的私有成员.
是否存在具有基于对象的访问级别的语言?它们是代替基于类的访问还是除了基于类的访问?这个功能对程序设计有什么影响?
Ruby具有基于对象的访问级别.这是Ruby编程的引用:
"受保护"和"私有"之间的区别相当微妙,并且在Ruby中与大多数常见的OO语言不同.如果方法受到保护,则可以由定义类或其子类的任何实例调用它.如果方法是私有的,则只能在调用对象的上下文中调用它 - 它永远不可能直接访问另一个对象的私有方法,即使该对象与调用者属于同一个类.
以下是来源:http://whytheluckystiff.net/ruby/pickaxe/html/tut_classes.html#S4
Java和Ruby之间的示例区别
Java的
public class Main {
public static void main(String[] args) {
Main.A a1 = new A();
Main.A a2 = new A();
System.out.println(a1.foo(a2));
}
static class A
{
public String foo(A other_a)
{
return other_a.bar();
}
private String bar()
{
return "bar is private";
}
}
}
// Outputs
// "bar is private"
Run Code Online (Sandbox Code Playgroud)
红宝石
class A
def foo other_a
other_a.bar
end
private
def bar
"bar is private"
end
end
a1 = A.new
a2 = A.new
puts a1.foo(a2)
# outputs something like
# in `foo': private method `bar' called for #<A:0x2ce9f44> (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |